Nugetパッケージからインストールした、SignalRを使用するAsp .Net 4.0フレームワークのWebアプリケーションに取り組んでいます。ローカルでデバッグせずにアプリケーションをデバッグまたは実行すると、正しく動作します。ただし、本番サーバーにデプロイすると、httphandlersに動的に挿入されているsignal/hubs
ファイルを見つけることができません。動的な性質のため、オンザフライで作成する必要があるため、作業ファイルをプロジェクトにコピーすることもできません。
次の方法でファイルをロードしました。
<script src="/signalr/hubs" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
そして後ろのコードで:
ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("~/signalr/hubs"));
これらはすべてローカルでは機能しますが、サーバーでは機能しません。 HTMLでレンダリングされたパスは正しいように見えますが、そこにファイルがなく、404エラーが発生しています。問題がある場合、サーバーはアプリケーションに完全信頼を与えており、アプリケーションはサブドメインを使用するIIS内の別のサイトでアプリケーションとして実行されています。
この問題は、web.configで次のフラグを設定することによって解決されました。
<configuration>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
</configuration>
何らかの理由で、Nugetはこれらの値をElmahまたはSignalRに設定しませんでした
私は同様の問題に直面していました、私は/signalr/hubs
から/virtualDirectoryName/signalr/hubs
そしてそれは働いた。
交換:
<script src="/signalr/hubs" type="text/javascript"></script>
と:
<script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
Jsファイルは次のようにインクルードする必要があります。
<script src="~/Scripts/jquery.signalR-2.1.1.js"></script>
<script src="~/signalr/hubs"></script>
私たちの場合、web.config( http://msdn.Microsoft.com/en-us/library/ms366723.aspx )のoptimizeCompilations属性に問題がありました。 web.configからoptimizeCompilationsを削除すると、問題が解決します。
サブドメインも使用しています。 SignalR 0.5.3を使用する場合、web.configを変更する必要がありました。
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>
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)で追加された新しいルーティング機能を使用できることを確認してください。 SignalRはそれらに依存しているため、それらが機能していることを確認する必要があります。カスタムルートを追加して、ルーティングが機能していることをテストしてください。
@PCasagrandeがコメントの1つでこの問題がサブドメインサイトで発生したことを指摘していることに気付きました。
同様の問題があり、アプリケーションフォルダーをURLから削除するための書き換えルールを追加しました。これは 'signalr/hubs'での404エラーを解決しました。
<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>
サブドメインの書き換えルールの前に「サブドメインの削除」ルールを追加しました。
<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>
私の障害は、ディレクトリに欠落しているGlobal.asaxファイルでした(dllでは不十分)
上記はこれの答えですが、私が行った一般的なルールのURL書き換えがすでにあり、これで解決されなかった404の問題について混乱した場合は、次のルールを追加して上書きしますURL書き換えの404を引き起こしていた貪欲なマッチング。
<rule name="signalR" stopProcessing="true">
<match url="^signalr.*" />
<action type="None" />
</rule>
<!-- greedier rules below -->
これは、誰かが同様の問題を抱えている場合に備えて、ここにあります。