Signalr 信号协商请求在响应中返回原始url,而不是覆盖的url

Signalr 信号协商请求在响应中返回原始url,而不是覆盖的url,signalr,load-balancing,signalr-hub,signalr.client,Signalr,Load Balancing,Signalr Hub,Signalr.client,我正在尝试更改signalR中的集线器连接url,以便所有请求都通过我的自定义负载平衡器 负载平衡器然后重定向到原始的signalR web应用程序并给出响应 为此,我尝试通过如下更改url来创建一个新的集线器连接 var signalR = $.signalR; signalR.hub = $.hubConnection("http://localhost:64071/LoadBalancer.Web/NotificationWeb/signalr", { useDefaultPath: fa

我正在尝试更改signalR中的集线器连接url,以便所有请求都通过我的自定义负载平衡器

负载平衡器然后重定向到原始的signalR web应用程序并给出响应

为此,我尝试通过如下更改url来创建一个新的集线器连接

var signalR = $.signalR;
signalR.hub = $.hubConnection("http://localhost:64071/LoadBalancer.Web/NotificationWeb/signalr", { useDefaultPath: false });
信号器尝试连接到此URL,并在协商请求中返回此响应

{ "Url":"/WE.abcd.Web/signalr", "ConnectionToken":"raYdZtwHWMP50fYIxa4MxRtR8xZAmUhhdlXreYVlB3Meo+2VeZSk4wMEdbkCbVEAzo/+gFyNofqV ......
然后,正如您在响应中看到的,URL包含原始URL(即WE.abc.web),因此通信直接发生在WE.abc.web上,而不是通过我的负载平衡器。甚至在覆盖URL之后也可以访问Web


如何强制协商请求返回LoadBalancer.Web URL而不是原始URL?

我认为只要Signal使用
请求生成协商响应URL。LocalPath
唯一的解决方案是在将协商响应返回客户端之前,负载平衡器修改协商响应(重写URL)。这就是反向代理的工作原理

只要使用IIS URL重写功能,就可以做到这一点,而无需更改负载平衡器代码


旁注:我对您的需求\生产环境一无所知,但如果可以从客户端(不隐藏在防火墙\代理之后)访问负载平衡站点(hosting SignalR),则所描述的行为完全可以。只要负载平衡器处于平衡状态,在所有服务器之间协商请求,后续连接请求绕过负载平衡器并不重要-客户端仍然处于平衡状态麻烦更少,因为您不需要连接…

这是服务器为获得此url所做的工作:。不确定为什么它在您的情况下很重要-客户端无论如何都不使用此url。在我的情况下,客户端将此url用于后续连接请求这是negotite之后的下一个请求?。。。。。。正如您在Url中再次看到的,原始站点名称出现了。在客户端,我并没有给出这个url,所以它似乎是从协商的响应中获取的request@PravinS-我试图更改您指出的代码。我现在使用的不是requestlocalpath,而是Referer路径。现在一切正常。下面是更改后的代码var referer=context.Request.Headers.Get(“referer”);var origineurl=string.IsNullOrEmpty(referer)?context.Request.LocalPath:新Uri(referer).LocalPath;var payload=new{Url=origineurl.Replace(“/negotiate”,”),………..我们使用Request.LocalPath的原因是什么?@KuldeepBhatnagar您在更改后是否最终建立了自己的信号器库?或者您是否只为
HubDispatcher
创建了子类?我面临着同样的问题,我试图避免修改信号源代码……我不确定负载平衡器是否可以/应该改变任何响应。它可能会更改请求/响应头,但应按原样返回响应。url是响应的一部分,负载平衡器是通用的,我们不能在负载平衡器中有一些特殊的逻辑。我没有说您的代码应该进行响应修改。这可以通过使用为负载平衡器站点配置的IIS URL重写功能来完成…是的,我同意使用URL重写功能。我将尝试配置它。谢谢你的帮助
现在,我的第二个问题是,如果在负载平衡环境中出现轮询请求,则获取“ConnectionId的格式不正确”。
这篇文章中给出了此问题
您是否也可以帮助解决此问题