与SignalR协商的服务结构反向代理

问题描述 投票:0回答:1

我正在为我的有状态服务连接到反向代理url,以连接到SignalR集线器,并且当SignalR尝试建立连接时,javascript客户端会调用协商端点,该端点返回一个url参数,然后尝试将其用于连接端点。问题在于返回的url参数是到群集上公开的终结点侦听器的部分路由。http://localhost:19081/MyServiceFabiricApplication/MyStateFulService/signalr/negotiate?clientProtocol=2.1&PartitionKey=1&PartitionKind=Int64Range

返回成功的

{"Url":"/9fd06df9-4399-4ea8-8771-9875b6ee4026/132235137104318266/8d308cc3-2fd7-40a6-96c3-2e521bf384ef/signalr",...

我如何告诉signalR忽略协商返回的URL,并使用我最初提供的反向代理URL进行连接?最终的问题是它将返回的路由与我最初提供的反向代理URL混合在一起,因此连接尝试将fankenstein URL与反向代理的端口一起使用,但将结构节点的路由与该URL混合使用。结果为404。

ws://localhost:19081/9fd06df9-4399-4ea8-8771-9875b6ee4026/132235137104318266/8d308cc3-2fd7-40a6-96c3-2e521bf384ef/signalr/connect

这是因为从协商端点返回的路由必须通过我端点的暴露端口5102直接调用。

   ws://localhost:5102/9fd06df9-4399-4ea8-8771-9875b6ee4026/132235137104318266/8d308cc3-2fd7-40a6-96c3-2e521bf384ef/signalr/connect

某种程度上,我需要在尝试连接之前修复URL,因为它通过协商生成的URL是错误的。

signalr reverse-proxy azure-service-fabric service-fabric-stateful
1个回答
0
投票

我最终使用了ajax数据过滤器来拦截协商响应并将URL重写回反向代理

   jQuery.ajaxSetup({
  dataFilter: (data, type) => {
    //modify the data
    if (~data.indexOf('ConnectionToken') && ~data.indexOf('Url') & ~data.indexOf('TryWebSockets')) {
      var dataobj = JSON.parse(data);
      dataobj.Url = this.ServiceProxyUrl + "signalr";
      return JSON.stringify(dataobj);
    }
    return data;
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.