2015-05-20 33 views
10

我在我的应用程序中有套接字通知,当我在本地运行时工作得很好,但是当我部署到我的VM时,它抱怨给出以下消息。SignalR“协商请求期间出错”

Error: Error during negotiation request. 
    at Object.signalR._.error (jquery.signalR.js:178) 
    at signalR.fn.signalR.start.onFailed (jquery.signalR.js:644) 
    at Object.signalR.fn.signalR.start.connection._.negotiateRequest.signalR.transports._logic.ajax.error (jquery.signalR.js:664) 
    at n.Callbacks.j (jquery.js:3094) 
    at Object.n.Callbacks.k.fireWith [as rejectWith] (jquery.js:3206) 
    at x (jquery.js:8261) 
    at XMLHttpRequest.n.ajaxTransport.k.cors.a.crossDomain.send.b (jquery.js:8600) 

它跨越了域,但我相信我已经超越了CORS的问题,但我可能是错的。

编辑

这是额外信息,我知道他一定会问。

请求:

GET http://path.to.my.vm/api/notifications/emmit/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22testemitter%22%7D%5D&_=1432140840826 HTTP/1.1 
Host: path.to.my.vm 
Connection: keep-alive 
Accept: text/plain, */*; q=0.01 
Origin: http://localhost:8100 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: http://localhost:8100/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en,fr;q=0.8,en-US;q=0.6 

响应:

HTTP/1.1 500 Internal Server Error 
Date: Wed, 20 May 2015 17:01:18 GMT 
Server: Mono-HTTPAPI/1.0 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT 
Access-Control-Max-Age: 1000 
Access-Control-Allow-Headers: x-requested-with, Content-Type, origin,authorization, accept, client-security-token 
Content-Length: 0 
Connection: close 

编辑

CORS支持在服务器上安装。

app.UseCors(CorsOptions.AllowAll); 
app.MapSignalR("",new HubConfiguration() 
    { 
     EnableJavaScriptProxies = true 
    }); 
+0

您是否在服务器上设置了cors支持?具体而言,您需要将您的呼叫更改为MapHubs以启用跨域请求。 –

+0

@WilliamXifaras是的,我刚刚编辑我的帖子。我有'UseCors(CorsOptions.AllowAll)' – TheJediCowboy

+0

你确定这是导致问题的CORS吗?我会首先尝试不使用CORS(例如,创建一个快速而肮脏的C#客户端),以确保该应用程序真正起作用。现在你可能会试图解决一个错误的问题。 – Pawel

回答

3

从我的web项目连接到集线器signalR,当我有同样的问题,然后我添加

<add input="{REQUEST_URI}" pattern="^/(signalr)" negate="true" /> 

改写在web.config文件中的规则,然后signalR枢纽成为到达。

我的客户中心连接代码如下

$.hubConnection('/signalr', { useDefaultPath: false }); 
+0

你能分享一下完整的重写规则吗? – JacobIRR

5

此外,请确保您的WebSockets主机signalr上启用。如果它是一个Windows PC,然后检查是否在控制面板 - >程序 - >打开或关闭Windows功能启用Websockets。

如果它是Windows服务器,Microsoft将提供有关如何启用WebSocket http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support的分步说明。

我在Signalr配置中安装了CORS,但仍然得到了同样的错误,结果证明这是我的问题。希望能帮助到你!

+0

可悲的是,这并没有解决我的问题 –