私は自分のプロジェクトで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">
....
SignalR.AspNet.dll
への参照を追加していない可能性があります。正しく思い出せば、/signalr/hubs
へのルートを追加する責任があります。
MVC 4を使用している場合、Global.asax.csのRouteConfig.RegisterRoutes(RouteTable.Routes)の前にRouteTable.Routes.MapHubs()を呼び出してみてください。
RouteTable.Routes.MapHubs();
RouteConfig.RegisterRoutes(RouteTable.Routes);
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();
}
}
}
私の場合、この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();
}
}
}
私もこの問題に苦労し、最終的に問題を引き起こしているポイントに到達しました。まず、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に変更してください。
IISをインストールしましたか?この場合、再インストールが必要になる場合があります。
c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
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 をご覧ください。
Visual Studio開発サーバーを使用してコードを実行するときに同じ問題が発生し、プロジェクト設定を変更してIIS Local Web Serverを使用するときに機能しました。
この問題に対して提起された欠陥があり、David Fowlerはコメントしました。この問題は将来のリリースで修正される予定ですが、現在のところこれは回避策です。現時点ではバグへのリンクが見つかりません。
長い話:私の場合、 R#(ReSharper) を使用し、SignalRを使用するプロジェクトを右クリックし、[リファクタリング] => [未使用の参照を削除]をクリックしました。気をつけてください:これは足で撃つです。 :D
重要なDLLからの参照はSignalR
から実行時にのみ使用されます。つまり、コンパイル時には不要です。明らかに、R#はコンパイル時の依存関係のみをチェックします。
つまり、これらの2つの参照が欠落していました。
SignalR
OWIN構成メソッドのブレークポイントがヒットしません)。NuGetパッケージを削除してから再インストールしました。 /hubs
404の問題を修正しました。
これは、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>
Signalr 2.0に更新し、MVCプロジェクトを運用サーバーに展開したときに、この404エラーが発生しました。 「公開前に既存のファイルをすべて削除する」オプションを使用してプロジェクトを公開すると、問題が解決しました。
これが誰かを助けることを願っています。
おそらく言及する価値がある:私はそれ自身の手動ルーティングを使用するWebフォームアプリケーションを実行しています。 OWINの起動はルーティングテーブルが設定された後に行われるため、/ signalr/hubsのルートはヒットしませんでした。 「/ signalr」で始まるすべてのパスに、ルートを無視するルールを追加しました(IE:Webフォームにルーティングを実行させます)。これで問題が解決しました。
私も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>
私のプロジェクトはASP.net 4.0 C#Webアプリで、テスト環境はWindows Server 2012です。
私は1.0.0 RC2でも同じ問題を抱えていましたが、マイケルが提案したことを実行しました。ありがとう。
@MatteKarla:NuGetによってSignalR 1.0.0 RC2をインストールすると、次の参照がプロジェクトに追加されます。
Microsoft.CSharpを手動で追加しないと、コンパイル中に次のエラーが発生します。
ハブクラス名が「Test」であり、クライアント側で「test」を参照していることが原因の可能性があります。
アプリケーションプールの.NET Frameworkバージョンをv2.0からv4.0に切り替えることで、この問題を解決しました。
私にとっての解決策は、reinstall all packagesで、すべてのdependencies。を復元することでした
Nuget powershellでこのコマンドを使用します。
Update-Package -Reinstall
Startup
クラスにapp.MapSignalR();
を追加すると、問題が解決します
signalr/hubsファイルは必要ありません。デバッグを簡単にし、関数を簡単に呼び出すことができるようにするためです。参照: 生成されたプロキシがあなたのために何をするかを見る 、それがすべてです。物事はそれなしで動作します。