これが私がしたことです。
- nugetを使用して、MVC4プロジェクトのSignalRを取得しました。
- コントローラ(SignalRTestController.cs)にMyHubクラスを作成しました
- インデックスアクションで、ハブの外部からメッセージをブロードキャストしようとし、ビューを返しました。
- ビューで、すべてのスクリプトと/ signalr/hubsを参照しました。
問題は/signalr/hubsが見つからないことです(404をスローします)。
私のプロジェクトには領域があり、次のように構成されています。
- MVCProject
- エリア
- サブフォルダ
- コントローラ
- SignalRTestController.cs
- モデル
- 意見
- Index.cshtml
- コントローラ
- サブフォルダ
- コントローラ
- モデル
- 意見
- スクリプト
- エリア
signalRのすべてのスクリプトはScriptsフォルダー内にあり、SignalRTestController.csは次のようになります。
namespace SignalRTest.Controllers
{
public class SignalRTestController : Controller
{
public ActionResult Index()
{
// Do some work here
// Broadcasting over a Hub from outside of a Hub
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.say("Hello SignalR!");
return View();
}
}
[HubName("MyHub")]
public class MyHub : Hub
{
public void Say(string message)
{
Clients.sendMessage(message);
}
}
}
私のIndex.cshtmlには、以下のようにすべてのjavascriptと/ signalr/hubsへの参照があります。//その他のJavascript
スクリプトtype="text / javascript" src = "/ signalr /hubs" />
コントローラは問題ないと思いますが、/ signalr/hubsを取得していません。404がスローされ、Chromeコンソールのメッセージは次のようになります。
スクリプトとして解釈されるが、MIMEタイプtext / htmlで転送されるリソース:「http://www.myproject.com/signalr/hubs」。Uncaught SyntaxError:予期しないトークン<hubs:2 Uncaught SignalR:ハブのロード中にエラーが発生しました。ハブの参照が正しいことを確認します(例:script src ='/ signalr /hubs'>)。
スクリプトがhtmlとして返される理由は、サーバーが404notfoundを返しているためです。
何が悪いのかわかりません。これはルーティングの問題かもしれないと思います。/ signalr / Hubsのプロジェクトにルーティング情報を追加する必要があるのか、それともここで何かが足りないのかはわかりません。
参考:新しい空のMVCプロジェクトを作成し、signalRを追加して作業を開始すると、完全に正常に機能します。ルーティングを追加する必要はありません。
また、いくつかの場所でデフォルトルーティングと属性ルーティングの両方を使用しています。ただし、コントローラーSignalRTestControllerは属性ルーティングを使用しません。