27

私は、SignalRを使用するAsp .Net 4.0フレームワーク上のWebアプリケーションに取り組んでおり、Nugetパッケージからインストールしています。ローカルでデバッグせずにアプリケーションをデバッグまたは実行すると、正しく動作します。ただし、本番サーバーにデプロイするとsignal/hubs、httphandlersに動的に挿入されているファイルを見つけることができません。動的な性質のため、オンザフライで作成する必要があるため、作業ファイルをプロジェクトにコピーすることもできません。

私はファイルをロードする次の方法を試しました:

<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の別のサイトでアプリケーションとして実行されています。

4

10 に答える 10

30

この問題は、web.config で次のフラグを設定することで解決されました。

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

何らかの理由で、Nuget は Elmah または SignalR にこれらの値を設定しませんでした

于 2011-11-09T14:10:10.427 に答える
9

私は同様の問題に直面していました.toを変更しただけ/signalr/hubs/virtualDirectoryName/signalr/hubsうまくいきました。

于 2012-09-19T13:14:43.960 に答える
4

交換:

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

と:

<script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
于 2011-11-08T16:46:38.587 に答える
2

この場合、web.config(http://msdn.microsoft.com/en-us/library/ms366723.aspx)のoptimizeCompilations属性に問題がありました。web.configからoptimizeCompilationsを削除すると、問題が解決しました。

于 2012-02-22T13:32:12.920 に答える
1

@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>
于 2012-03-12T09:05:02.770 に答える
1

上記はこれに対する答えですが、私が行った一般的なルールの URL 書き換えが既にあり、これで解決されなかった 404 問題について混乱していた場合は、次のルールを上書きするように追加したことを指摘したいと思います。 URL Rewrite の 404 を引き起こしていた貪欲なマッチング。

<rule name="signalR" stopProcessing="true">
    <match url="^signalr.*" />
    <action type="None" />
</rule>
<!-- greedier rules below -->

誰かが同様の問題を抱えている場合に備えて、これはここにあります。

于 2011-12-27T07:08:13.697 に答える
1

サブドメインも使用しています。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 はそれらに依存しているため、それらが機能していることを確認する必要があります。カスタム ルートを追加して、ルーティングが機能していることをテストしてみてください。

于 2012-12-03T00:38:40.893 に答える