Asp.net mvc IIS虚拟目录中的信号器2.0-404

Asp.net mvc IIS虚拟目录中的信号器2.0-404,asp.net-mvc,iis-7,signalr,Asp.net Mvc,Iis 7,Signalr,我在部署运行SignalR 2.0.2的非常基本的MVC5应用程序时遇到了一个问题。当我使用IIS Express运行本地开发环境时,一切都非常好。当我部署到IIS时,我的js在尝试连接到Signal时收到404错误 更具体地说,我将部署到默认网站下运行的应用程序/虚拟目录。当我直接发布到默认网站时,一切都能成功运行,因此IIS不是问题所在 获取http://myServer/signalr/negotiate?连接数据=%5B%5D&clientProtocol=1.3&=1395517687

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

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

获取http://myServer/signalr/negotiate?连接数据=%5B%5D&clientProtocol=1.3&=1395517687175 404(未找到)

我假设404是由缺少的应用程序名引起的。ie:myServer/MyApp/signal/agreement

我搜索了许多帖子和信号器文档,但没有找到关于IIS和应用程序/虚拟目录以及信号器的相关信息。下面是我的应用程序中的代码片段

谢谢

JS:

Startup.cs:

 app.MapSignalR();
更新 通过更改下面的JS代码,我能够“修复”这个问题。问题是,这有多合适

//var connection = $.hubConnection();
var connection = $.hubConnection("/MyApp/signalr", { useDefaultPath: false });

你的方案似乎合理

{useDefaultPath:false}
只是告诉signar不要将“/signar”附加到url,因此您也可以像这样创建连接对象:
var connection=$.hubConnection(/MyApp”)

或者,如果您想使用在/MyApp/signalr/hubs生成的JS hub代理,您可以这样连接:

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 () { /* ... */ });

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

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

是的,当部署到默认网站下的IIS应用程序时,这对我来说是“开箱即用”的。我想我只是好奇为什么“非生成代理”JS代码在这种情况下失败,为什么需要应用我的修复程序?当您使用生成的JS集线器代理时,Signal有机会看到您用于请求生成的JS的URL(可能是“/MyApp/Signal/hubs”)。signer只是在末尾剥离“/hubs”部分,并调用$.connection.hub=
$.hubConnection(“/MyApp/signer”,{useDefaultPath:false})
如果要更改此url,只需在调用
$.connection.hub.start()
之前设置
$.connection.hub.url
。非常感谢,您的解决方案对我很有效。
var connection = $.hubConnection(document.location.origin + document.location.pathname);