3

我有一个独特的情况。我开发了一个 MVC 4 网站和连接到托管 SignalR 集线器的网站的 .NET 客户端。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”并且我可以通过网络浏览器以这种方式浏览,它不会作为信号器连接字符串工作。我必须使用完全合格的http{s}//mywebsiteserver.mydomainname.xyz/mywebsite 的 DNS 名称

有什么建议么?

谢谢!麦克风

4

4 回答 4

7

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

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

于 2013-04-16T02:23:37.673 回答
0

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

假设您的中心位于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 没有。我自己犯了这个错误。:)

于 2015-07-21T20:46:21.200 回答
0

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

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

ServicePointManager.Expect100Continue = false;

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

于 2016-01-28T17:47:21.310 回答
0

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

于 2015-07-23T15:21:54.880 回答