Signalr/Hub not loading in IIS 7 but working corre

2019-01-10 23:20发布

I am working on a Web Application on the Asp .Net 4.0 framework that uses SignalR, having installed it from the Nuget package. When I debug or run the application without debugging locally it works correctly. However, when it is deployed to the production server it is unable to find the signal/hubs file that is being dynamically injected into the httphandlers. Due to it's dynamic nature it has to be created on the fly, so I can't just copy the working file into the project either.

I have tried the following methods of loading the file:

<script src="/signalr/hubs" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>

And in the code behind:

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

All of these work locally but not on the server. The path that is rendered in the html looks correct, but there is no file there, delivering a 404 error. If it matters, the server has given the application Full Trust and the application is being run as an application under another site in IIS that uses a subdomain.

9条回答
Fickle 薄情
2楼-- · 2019-01-10 23:24

In our case we had issue with optimizeCompilations attribute in web.config (http://msdn.microsoft.com/en-us/library/ms366723.aspx). Removing optimizeCompilations from web.config solved issue.

查看更多
Explosion°爆炸
3楼-- · 2019-01-10 23:28

I noticed @PCasagrande mentioned in one of the comments that this problem was on a subdomain site.

I had a similar problem and added a rewrite rule to remove the application folder from the url. This solved my 404 error on 'signalr/hubs':

<rule name="Remove SubDomain folder from url" stopProcessing="false">
    <match url="^(.*)SubDomain/(.*)$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
    <action type="Rewrite" url="{R:1}{R:2}" />
</rule>

I added the 'remove subdomain' rule before the rewrite rule for the subdomain:

<rule name="Redirect subdomain.domain.com to SubDomain folder" enabled="true">
    <match url="^(.*)$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="^subdomain\.domain\.com$" />
    </conditions>
    <action type="Rewrite" url="/SubDomain/{R:0}" />
</rule>
查看更多
冷血范
4楼-- · 2019-01-10 23:29

I am also using a subdomain. When using SignalR 0.5.3, I had to modify the web.config:

<system.webServer> 
      <modules> 
        <remove name="UrlRoutingModule-4.0" /> 
        <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
      </modules> 
    </system.webServer>

After upgrading to Microsoft.AspNet.SignalR 1.0.0-alpha2 NuGet added an ~/App_Start/RegisterHubs.cs, but I didn't think that was working for me due to using Web Forms and my setup. I had to add RouteTable.Routes.MapHubs(); to my Global.asax Application_Start method.

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

Basically make sure you can use the new routing features that were added in .Net 3.5 SP1 (System.Web.Routing). Since SignalR depends on them, you will need to ensure that they are working. Try adding a custom route to test that your routing is working.

查看更多
家丑人穷心不美
5楼-- · 2019-01-10 23:30

I was facing a similar issue, I just changed the /signalr/hubs to /virtualDirectoryName/signalr/hubs and it worked.

查看更多
姐就是有狂的资本
6楼-- · 2019-01-10 23:33

The problem was solved by setting the following flags in the web.config.

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <modules runAllManagedModulesForAllRequests="true">
        </modules>
    </system.webServer>
</configuration>

For some reason Nuget did not set these values for Elmah or SignalR

查看更多
一夜七次
7楼-- · 2019-01-10 23:33

My fault was the missing Global.asax file in directory (dll is not enough)

查看更多
登录 后发表回答