IIS虚拟目录中的SignalR 2.0 - 404

时间:2014-03-22 20:10:54

标签: asp.net-mvc iis-7 signalr

在部署运行SignalR 2.0.2的非常基本的MVC5应用时,我遇到了问题。当我使用IIS Express运行它时,一切都在我的本地开发环境中运行良好。当我部署到IIS时,我的js收到404错误,试图连接到SignalR。

更具体地说,我正在部署到我的默认网站下运行的应用程序/虚拟目录。当我直接发布到默认网站时,一切正常,因此IIS不是问题。

获取http:// myServer / signalr /negotiate?connectionData=%5B%5D&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 });

2 个答案:

答案 0 :(得分:1)

你的修复似乎是合理的。

{ useDefaultPath: false }只是告诉SignalR不要将“/ signalr”附加到网址,因此您也可以像这样创建连接对象: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

答案 1 :(得分:1)

将在dev中工作的解决方案,以及作为应用程序,虚拟目录或root托管的IIS中的解决方案是使用页面URL作为其基础来配置集线器。这意味着您不需要对该值进行硬编码,并否定开发和部署方案的配置更改。

var connection = $.hubConnection(document.location.origin + document.location.pathname);