50

プロジェクトでSignalR(https://github.com/SignalR/SignalR)を使用しています。ここからhttps://github.com/SignalR/SignalR/wiki/QuickStart-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">
....
4

21 に答える 21

44

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

        RouteTable.Routes.MapHubs();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
于 2013-03-15T01:02:38.067 に答える
29

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

于 2012-01-20T14:09:10.257 に答える
14

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();
        }
    }
}
于 2013-01-23T03:24:53.553 に答える
14

私の場合、この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();
        }
    }
}
于 2015-02-12T11:45:14.187 に答える
14

私もこの問題に苦労し、ついに問題の原因となったところに到達しました。まず第一に、RouteTable.Routes.MapHubs();Globalasax /Application_Start内でのSignalRv2の呼び出しは廃止され、コンパイラーは警告をスローすることさえあります。代わりに、次のパブリックメソッドを使用して専用のStartUpクラスを追加します。

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

すべての構成はここにあります。詳細については、ドキュメントを参照してください。

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

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

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

于 2016-02-11T12:54:13.840 に答える
4

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

ここに画像の説明を入力してください

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

于 2012-12-31T18:16:28.833 に答える
4

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

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
于 2014-01-08T14:52:20.467 に答える
4

簡単に言うと、私の場合はR#(ReSharper)を使用し、SignalRを使用するプロジェクトを右クリックして、[リファクタリング]=>[未使用の参照を削除]をクリックしました。注意してください:これは足のシュートです。:D

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

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

  1. Microsoft.AspNet.SignalR.SystemWeb
  2. Microsoft.Owin.Host.SystemWeb(これがないと、SignalROWIN構成メソッドのブレークポイントに到達することさえありません)。

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

于 2014-05-23T16:00:27.470 に答える
3

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

好き:

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

GitHubのSignalRFAQを参照してください

編集: Trevor De Koekkoekがコメントで述べたように、@Url.ContentMVC4以降を使用している場合は、自分自身を追加する必要はありません。URIの前に付けるだけで~/十分です。詳細については、この他のSOの質問を確認してください。

于 2012-01-27T10:32:22.867 に答える
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>
于 2014-05-18T15:59:01.297 に答える
1

私のプロジェクトはASP.net4.0C#Webアプリで、テスト環境はWindowsServer2012です。

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'が定義またはインポートされていません
于 2013-01-24T11:06:58.230 に答える
1

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

これが誰かに役立つことを願っています。

于 2014-01-15T06:46:44.303 に答える
1

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

私たちが行った解決策(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>
于 2015-11-23T23:04:20.473 に答える
1

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

于 2016-05-19T18:49:10.957 に答える
0

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

于 2016-03-02T08:31:15.380 に答える
0

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

于 2016-07-29T12:37:57.353 に答える
0

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

于 2016-10-07T06:14:19.877 に答える
0

私にとっての解決策は、すべてのパッケージを再インストールし、すべての依存関係を復元することでした。

nuget powershellを開き、このコマンドを使用します。

Update-Package -Reinstall
于 2017-05-27T09:46:54.647 に答える
0

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

于 2017-06-23T06:18:45.727 に答える
0

私の場合(既存の大きなmvcプロジェクトにsignalrが追加されました)、OWIN Startup.Configruation()を起動しない理由には、web.configに「dependedntAssembly」と間違った「targetFramwerork」バージョンがありませんでした。

単純なsignalRプロジェクトを最初から作成し、web.configファイルを比較しました。私たちを助けてくれたのは:

  1. 4.5から4.5.2への修正
    <httpRuntime targetFramework="4.5" ... > 
    <compilation debug="true" targetFramework="4.5" ... >
  1. 依存アセンブリの追加:
<dependentAssembly> 
    <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
</dependentAssembly>
于 2019-12-09T14:37:02.550 に答える
0

URLホスティングが間違っていたため、この例外が発生していました。「/chathub」と書きましたが、エンドポイントに「/chat」と表示されました

于 2020-07-21T21:26:59.813 に答える