Signalr / Hub未在IIS 7中加载,但在Visual Studio中正常工作

我正在使用SignalR的Asp .Net 4.0框架上的Web应用程序,从Nuget包安装它。 当我调试或运行应用程序而不在本地调试时,它可以正常工作。 但是,当它部署到生产服务器时,它无法找到动态注入httphandlers的signal/hubs文件。 由于它的动态特性,它必须在运行中创建,所以我不能只将工作文件复制到项目中。

我尝试了以下加载文件的方法:

   

并在代码背后:

 ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("~/signalr/hubs")); 

所有这些都在本地工作,但不在服务器上。 在html中呈现的路径看起来是正确的,但那里没有文件,提供404错误。 如果重要,则服务器已将应用程序设置为完全信任,并且该应用程序将作为IIS中使用子域的另一个站点下的应用程序运行。

通过在web.config中设置以下标志来解决该问题。

        

出于某种原因,Nuget没有为Elmah或SignalR设置这些值

我遇到了类似的问题,我只是将/signalr/hubs更改为/virtualDirectoryName/signalr/hubs并且它工作正常。

更换:

  

有:

  

你Js文件应该像这样包含:

   

以上就是这个问题的答案,但我想指出,如果你已经对我做过的通用规则进行了URL重写,并且我对我的404问题感到困惑,这个问题没有被这个解决,我添加了以下规则来覆盖我贪婪的匹配导致了404重写URL。

      

这只是在某人遇到类似问题的情况下。

在我们的例子中,我们在web.config( http://msdn.microsoft.com/en-us/library/ms366723.aspx )中遇到了optimizeCompilations属性的问题。 从web.config中删除optimizeCompilations解决了问题。

我注意到@PCasagrande在其中一条评论中提到这个问题出现在子域网站上。

我有类似的问题,并添加了重写规则从URL中删除应用程序文件夹。 这解决了’signalr / hubs’上的404错误:

      

我在子域的重写规则之前添加了“删除子域”规则:

        

我的错是目录中缺少的Global.asax文件(dll是不够的)

我也在使用子域名。 使用SignalR 0.5.3时,我不得不修改web.config:

       

升级到Microsoft.AspNet.SignalR 1.0.0-alpha2后,NuGet添加了〜/ App_Start / RegisterHubs.cs,但由于使用Web窗体和我的设置,我认为这对我没有用。 我不得不添加RouteTable.Routes.MapHubs(); 到我的Global.asax Application_Start方法。

 void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapHubs(); } 

基本上确保您可以使用.Net 3.5 SP1(System.Web.Routing)中添加的新路由function。 由于SignalR依赖于它们,您需要确保它们正常工作。 尝试添加自定义路由以测试您的路由是否正常工作。