【问题标题】:SignalR .net client connects to hub, but can't hubProxy.Invoke()SignalR .net 客户端连接到集线器,但不能 hubProxy.Invoke()
【发布时间】:2013-04-08 03:18:22
【问题描述】:

我有一个独特的情况。我开发了一个 MVC 4 网站和 .NET 客户端,可连接到托管 SignalR 集线器的站点。 hubConnection 对象成功连接到集线器。但是,如果我调用 hubProxy.Invoke("Test").Wait(); ,则创建的 hubProxy 对象根本不会返回。我的集线器只是返回一个布尔值 true;

有趣的是,当我通过 VS 和 IIS express 在本地运行网站和 .net 客户端时,一切正常。当我在完整的 2008R2 IIS 7.5 服务器和笔记本电脑上的 .net 客户端上运行网站时,它失败了。或者更恰当地说,线程只是在 HubProxy.Invoke("Test").Wait() 处停止并且永远不会返回(它只是继续运行)。

更有趣的部分是当我开始运行 Fiddler 以查看发生了什么或者调用是否通过 Web 服务器时,问题随后自行解决并且一切正常。

似乎以某种方式充当我的 .net 客户端代理的提琴手使 hubProxy.Invoke() 工作。如果我需要代理,我会认为我的 HubConnection 对象会失败?能够成功连接到集线器连接只是意识到线程似乎永远运行试图调用集线器代理上的函数,这有点误导??

谁能澄清这种行为?以及关于我需要做什么才能在 .net 客户端正确创建 HubConnection/Proxy 以调用服务器上的方法的任何建议?

此外,这可能相关也可能不相关。我注意到,如果我将我的网站托管为:
http{s}//mywebsiteserver/mywebsite”,我可以通过网络浏览器以这种方式浏览,它不能用作信号器连接字符串。我必须使用完全限定的 DNS 名称 http{s}//mywebsiteserver.mydomainname.xyz/mywebsite

有什么建议吗?

谢谢! 迈克

【问题讨论】:

    标签: proxy signalr


    【解决方案1】:

    在我看来,您需要将ServicePointManager.DefaultConnectionLimit 设置为大于.NET 客户端中默认值2 的值开始您的HubConnection 或发出任何其他HTTP 请求之前。我发现 10 是运行单个 SignalR HubConnection 的合理限制。

    通常,SignalR 将只有 2 个或更少的同时 HTTP 连接,但情况并非总是如此。我发现运行 Fiddler 有时会隐藏这个问题,但我不知道为什么。

    【讨论】:

    • 虚幻,你是 100% 正确的。这就是答案。如果将此信息放在 SignalR Wiki 中,那将非常有益。似乎每个尝试使用 .NET signalR 客户端的人都会遇到这个问题?奇怪的是它没有记录在任何地方,还是我在某个地方错过了它?
    【解决方案2】:

    另一种解释可能是您需要仔细检查您的网址。

    假设您的中心位于 site.com,并且您有一个从 www.site.com 到 site.com 的 301 重定向 .

    那么SignalR在你使用的时候可能好像建立了连接

    _hubConnection = new HubConnection("http://www.yoursite.com/signalr");
    

    但在这种情况下你必须使用

    _hubConnection = new HubConnection("http://yoursite.com/signalr");
    

    否则 _hubConnection.Start 似乎有效,但 _proxy.Invoke 无效。我自己犯了这个错误。 :)

    【讨论】:

      【解决方案3】:

      还要确保您在服务器上定义的方法不是静态的。 我自己也遇到过这个问题。

      【讨论】:

        【解决方案4】:

        在我的情况下,我收到此 Web 请求错误“请求失败,HTTP 状态 417:预期失败。”

        我在客户端解决了这个问题:

        ServicePointManager.Expect100Continue = false;
        

        阅读更多: http://www.codeproject.com/Articles/94235/The-request-failed-with-HTTP-status-417-Expectatio

        【讨论】:

          猜你喜欢
          • 2019-10-07
          • 1970-01-01
          • 2015-08-10
          • 1970-01-01
          • 2019-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多