在部署运行SignalR 2.0.2的非常基本的MVC5应用程序时遇到问题.当我使用IIS Express运行时,一切都在我的本地开发环境中运行良好.当我部署到IIS时,我的js收到404错误,试图连接到SignalR.
更具体地说,我正在部署到我的默认网站下运行的应用程序/虚拟目录.当我直接发布到默认网站时,一切正常,因此IIS不是问题.
获取http:// myServer / signalr / negotiate?connectionData = []& clientProtocol = 1.3& _ = 1395517687175 404(未找到)
我假设404是由缺少的应用程序名称引起的.即:myServer / MyApp / signalr / negotiate …
我搜索了许多帖子和SignalR文档,但没有关于IIS和应用程序/虚拟目录和SignalR的运气.以下是我的应用程序中的代码片段.
谢谢!
JS:
var connection = $.hubConnection();
var proxy = connection.createHubProxy('TestHub');
connection.start()
.done(function () {
console.log('Now connected, connection ID=' + connection.id + ' using transport=' + connection.transport.name);
})
.fail(function () { console.log('Could not connect'); });
Startup.cs:
app.MapSignalR();
更新
通过更改以下JS代码,我能够“修复”该问题.问题是,这有多正确?
//var connection = $.hubConnection();
var connection = $.hubConnection("/MyApp/signalr", { useDefaultPath: false });
最佳答案 你的修复似乎合理.
{useDefaultPath:false}只是告诉SignalR不要将“/ signalr”附加到url,所以你也可以像这样创建你的连接对象:var connection = $.hubConnection(“/ MyApp”);
或者,如果您想使用在/ MyApp / signalr / hubs中生成的JS集线器代理,您可以像这样连接:
var proxy = $.connection.testHub;
// Make sure you always wire up client methods before calling start
proxy.client.myClientMethod = function () { /* ... */ };
$.connection.hub.start()
.done(function () { /* ... */ })
.fail(function () { /* ... */ });
http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#genproxy