我有一个现有的MVC应用程序,我正在集成一个集线器,现在我已经像这样设置了集线器:
routeTable.MapHubs("myapp/chat/room", new HubConfiguration { EnableCrossDomain = true, EnableDetailedErrors = true, EnableJavaScriptProxies = true });
然后在客户端,我这样连接:
var connection = $.hubConnection(SystemConfiguration.ServiceUrl + "/myapp/chat/room", { useDefaultPath: false });
var hub = this.Connection.createHubProxy("ChatHub"); // Same name as on the hub attribute
connection.start().done(function(){ /* do stuff */});
然后我看到HTTP请求如下:
http://localhost:23456/myapp/chat/room/negotiate?_=1374187915970
响应标头
Access-Control-Allow-Cred... true, true
Access-Control-Allow-Head... content-type, x-requested-with, *
Access-Control-Allow-Meth... GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Orig... http://localhost:34567, http://localhost:34567
Access-Control-Max-Age 10000
Cache-Control no-cache
Content-Length 420
Content-Type application/json; charset=UTF-8
Date Thu, 18 Jul 2013 22:52:18 GMT
Expires -1
Pragma no-cache
Server Microsoft-IIS/8.0
X-AspNet-Version 4.0.30319
X-Content-Type-Options nosniff
请求标题
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Host localhost:23456
Origin http://localhost:34567
Referer http://localhost:34567/myapp/chat?chatId=1764a2e3-ff6f-4a17-9c5f-d99642301dbf
User-Agent Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
响应虽然不包含正文,但它有200状态但是...我正在服务器上调试,并且hub方法永远不会被命中。在这种情况下唯一不标准的事情是我有一个自定义CORS HttpModule拦截流量并附加CORS所需的头,正如你在响应中看到的那样,所以不确定这是否会以某种方式混淆SignalR的CORS支持。无论如何,我可以看到HttpModule被击中,所以它经过那里很好,但在那里和枢纽之间不知何故丢失了。
尝试使用Google搜索但没有太多关于此主题的信息......
答案 0 :(得分:1)
这个问题似乎取决于我在HttpModule级别的CORS处理,它必须以某种方式与SignalR发生冲突...如果我检查模块以查看URL是否包含“chat / room”并忽略请求如果需要它然后工作正常,但它感觉像一个黑客,但至少它现在有效。