web-dev-qa-db-ja.com

404エラーを与えるSignalR "signalr / hubs"

私は自分のプロジェクトでSignalR(https://github.com/SignalR/SignalR)を使用しています。ここから https://github.com/SignalR/SignalR/wiki/QuickStart-Hubs Hubsの使用方法がわかりました。しかし、「signalr/hubs」スクリプトは404エラーを発生させます。ソースを表示するURLは次のとおりです。 http:// localhost:50378/signalr/hubs 404エラーが発生しています

ここに私のコードがあります:ハブ:

public class Test:Hub
{
    public void Start()
    {
        Caller.guid = Guid.NewGuid();
    }

    public void TestMethod()
    {
        Clients.show("test", Caller.guid);
    }
}

ASPX:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Title</title>
        <script src="../Scripts/jquery-1.6.4.min.js" type="text/javascript"></script>
        <script src="../Scripts/jquery.signalR.js" type="text/javascript"></script>
        <script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
        <script type="text/javascript">

            $(document).ready(function () {
                var test = $.connection.test;
                $("#btnTest").click(function () {
                    test.testMethod();
                });
                test.show = function (text, guid) {
                    if (guid != test.guid) //notify all clients except the caller
                        alert(text);
                };
                $.connection.hub.start(function () { test.start(); });
            });

        </script>
    </head>
    <body>
        <form id="HtmlForm" runat="server">
            <div>

            </div>
        </form>
    </body>
</html>

Web.config:

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
....
49
Rocky Singh

SignalR.AspNet.dllへの参照を追加していない可能性があります。正しく思い出せば、/signalr/hubsへのルートを追加する責任があります。

29
MatteKarla

MVC 4を使用している場合、Global.asax.csのRouteConfig.RegisterRoutes(RouteTable.Routes)の前にRouteTable.Routes.MapHubs()を呼び出してみてください。

        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
44
Adamy

SignalR 1.0.0 RC2には、READMEがあります。これは、ハブルートを手動で確立する必要があることを示しています。:)ここにスニペットがあります...

using System;
using System.Web;
using System.Web.Routing;

namespace MyWebApplication
{
    public class Global : System.Web.HttpApplication
    {
        public void Application_Start()
        {
            // Register the default hubs route: ~/signalr
            RouteTable.Routes.MapHubs();
        }
    }
}
14
Michael R

私の場合、この404の主な理由は、ハブが適切にマップされなかったことです。 RouteTable.Routes.MapHubs();は廃止されました。ハブをマッピングするには、次のようにスタートアップクラスを作成できます。

[Assembly: OwinStartup(typeof(WebApplication1.Startup))]
namespace WebApplication1
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}
14

私もこの問題に苦労し、最終的に問題を引き起こしているポイントに到達しました。まず、SignalR v2では、Globalasax/Application_Start内のcallingRouteTable.Routes.MapHubs();は廃止され、コンパイラーは警告を発します。代わりに、次のパブリックメソッドを持つ専用のStartUpクラスを追加します。

public void Configuration(IAppBuilder app)
{
    app.MapSignalR();
}

すべての設定はここにあります。詳細については、 documentation を参照してください。

さて、狂ったようにグーグルで何時間も無駄にした後、先ほど述べたStartUpクラスのConfigureメソッド内で例外をスローすることにしました。例外がスローされない場合、Owinが起動しないことも理解できます。私の推測は正しかった。何らかの理由で、Owinが起動していないか、何かが抑制されていました。私の場合、web.configファイルにあるこの邪悪な構成設定でした。

    <add key="owin:AutomaticAppStartup" value="false" />

設定の名前はかなりわかりやすいと思います。これを削除するか、falseをtrueに変更してください。

13

IISをインストールしましたか?この場合、再インストールが必要になる場合があります。

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
4
Dunken

ASP.NET MVC3を使用していると仮定すると、@Url.ContentでJavaScriptファイルを参照する必要があります。

のような:

<script src="@Url.Content("~/Scripts/jquery.signalR.min.js")" type="text/javascript"></script>

SignalR FAQ on GitHub を参照してください

編集:Trevor De Koekkoekがコメントで述べたように、MVC4以降を使用している場合、@Url.Contentを自分で追加する必要はありません。 uriの前に~/を追加するだけで十分です。詳細については、 this other SO question をご覧ください。

3
thomaux

Visual Studio開発サーバーを使用してコードを実行するときに同じ問題が発生し、プロジェクト設定を変更してIIS Local Web Serverを使用するときに機能しました。

enter image description here

この問題に対して提起された欠陥があり、David Fowlerはコメントしました。この問題は将来のリリースで修正される予定ですが、現在のところこれは回避策です。現時点ではバグへのリンクが見つかりません。

3
SecretDeveloper

長い話:私の場合、 R#(ReSharper) を使用し、SignalRを使用するプロジェクトを右クリックし、[リファクタリング] => [未使用の参照を削除]をクリックしました。気をつけてください:これは足で撃つです。 :D

重要なDLLからの参照はSignalRから実行時にのみ使用されます。つまり、コンパイル時には不要です。明らかに、R#はコンパイル時の依存関係のみをチェックします。

つまり、これらの2つの参照が欠落していました。

  1. Microsoft.AspNet.SignalR.SystemWeb
  2. Microsoft.Owin.Host.SystemWeb(これがないと、SignalR OWIN構成メソッドのブレークポイントがヒットしません)。

NuGetパッケージを削除してから再インストールしました。 /hubs 404の問題を修正しました。

3

これは、SignalR wikiからの完全な回答です( https://github.com/SignalR/SignalR/wiki/Faq )。それは私と一緒に働いた:

まず、Global.asaxでMapHubs()を呼び出していることを確認してください。

アプリケーションの他のルートの前に、ハブルートが登録されていることを確認してください。

RouteTable.Routes.MapHubs();

ASP.NET MVC 4では、次のことができます。

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

MVC 3アプリケーションを作成している場合は、スクリプト参照にUrl.Contentを使用していることを確認してください。

<script type="text/javascript" src="@Url.Content("~/signalr/hubs")"></script>

通常のASP.NETアプリケーションを作成している場合は、スクリプト参照にResolveClientUrlを使用します。

<script type="text/javascript" src='<%= ResolveClientUrl("~/signalr/hubs") %>'></script>

それでも上記が機能しない場合は、web.configでRAMMFARが設定されていることを確認してください。

<configuration>
   <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
        </modules>
    </system.webServer>
</configuration>
2
Saad

Signalr 2.0に更新し、MVCプロジェクトを運用サーバーに展開したときに、この404エラーが発生しました。 「公開前に既存のファイルをすべて削除する」オプションを使用してプロジェクトを公開すると、問題が解決しました。

これが誰かを助けることを願っています。

1
arun.m

おそらく言及する価値がある:私はそれ自身の手動ルーティングを使用するWebフォームアプリケーションを実行しています。 OWINの起動はルーティングテーブルが設定された後に行われるため、/ signalr/hubsのルートはヒットしませんでした。 「/ signalr」で始まるすべてのパスに、ルートを無視するルールを追加しました(IE:Webフォームにルーティングを実行させます)。これで問題が解決しました。

1
Howard

私もASP.NET 4.0 Web Formsアプリケーションでこの同じ問題に遭遇しました。開発サーバーでは機能しましたが、実稼働環境では機能しませんでした。すべてのリクエスト/モジュールを管理モードで実行することを保証するソリューションは、私たちには受け入れられませんでした。

ダウンしたソリューション(ASP.NET Webフォームの場合)は次のとおりです。次のセクションをWeb.Configに追加します。

<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>
1
Don

私のプロジェクトはASP.net 4.0 C#Webアプリで、テスト環境はWindows Server 2012です。

私は1.0.0 RC2でも同じ問題を抱えていましたが、マイケルが提案したことを実行しました。ありがとう。

@MatteKarla:NuGetによってSignalR 1.0.0 RC2をインストールすると、次の参照がプロジェクトに追加されます。

  • Microsoft.AspNet.SignalR.Core
  • Microsoft.AspNet.SignalR.Owin
  • Microsoft.AspNet.SignalR.SystemWeb
  • Microsoft.Owin.Host.SystemWeb

Microsoft.CSharpを手動で追加しないと、コンパイル中に次のエラーが発生します。

  • 事前定義タイプ「Microsoft.CSharp.RuntimeBinder.Binder」は定義またはインポートされていません
1
Vinix

ハブクラス名が「Test」であり、クライアント側で「test」を参照していることが原因の可能性があります。

0

アプリケーションプールの.NET Frameworkバージョンをv2.0からv4.0に切り替えることで、この問題を解決しました。

0
MichaelAttard

私にとっての解決策は、reinstall all packagesで、すべてのdependencies。を復元することでした

Nuget powershellでこのコマンドを使用します。

Update-Package -Reinstall

Startupクラスにapp.MapSignalR();を追加すると、問題が解決します

0
Kamran Qadir

signalr/hubsファイルは必要ありません。デバッグを簡単にし、関数を簡単に呼び出すことができるようにするためです。参照: 生成されたプロキシがあなたのために何をするかを見る 、それがすべてです。物事はそれなしで動作します。

0
saju