これが私がしたことです。
問題は/ signalr/hubsが見つからないことです(404をスローします)。
私のプロジェクトには領域があり、次のように構成されています。
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 Consoleのメッセージは次のようになります:
スクリプトとして解釈されるが、MIMEタイプtext/htmlで転送されるリソース:「http://www.myproject.com/signalr/hubs」。 Uncaught SyntaxError:予期しないトークン<hubs:2 Uncaught SignalR:ハブの読み込み中にエラーが発生しました。ハブの参照が正しいことを確認してください。スクリプトsrc = '/ signalr/hubs'>。
スクリプトがhtmlとして返される理由は、サーバーが404 notfoundを返しているためです。
何が悪いのかわかりません。これはルーティングの問題かもしれないと思います。/signalr/hubsのプロジェクトにルーティング情報を追加する必要があるのか、それともここに何かが足りないのかはわかりません。
参考:新しい空のMVCプロジェクトを作成し、signalRを追加して作業を開始すると、完全に正常に機能します。ルーティングを追加する必要はありません。
また、いくつかの場所でデフォルトルーティングと属性ルーティングの両方を使用しています。ただし、コントローラーSignalRTestControllerは属性ルーティングを使用しません。
RouteTable.Routes.MapHubs()(おそらくGlobal.asax内)への呼び出しがありますか?もしそうなら、それを取り除き、それがあなたの問題を解決するかどうか見てみてください。 –ピート11月16日17:22
もう少し遊んでいます。現在のバージョンでは(署名されたアセンブリが必要だったため、最新のソースを入手しました)、RouteTable.Routes.MapHubs()を呼び出す必要があるようです。ただし、それが機能するためには、最初に(または少なくともRouteConfig.RegisterRoutes()呼び出しの前に)呼び出す必要がありました。その後呼び出された場合、MVCはそのコントローラーを探しに行き、それは機能しません。 nuGet経由で取得した以前のバージョンでは、RouteTable.Routes.MapHubs()を削除すると問題が解決しましたが、現在は必須のようです。お役に立てば幸いです。 -ピート11月27日20:53
どうやら、RouteTable.Routes.MapHubs()をRouteTable.Routes.MapHubs( "〜/ signalr")に変更することで、問題を解決したようです。
MapHubsは廃止されました。次のように、OwinスタートアップクラスでMapSignalR拡張メソッドを使用します。
[Assembly: OwinStartupAttribute(typeof(signalr_test.Startup))]
namespace signalr_test
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR(); //can take path also see overloads...
}
}
}
私は同じ問題を経験していました。修正は次のとおりです。
Nugetは、必要なすべての参照を追加しませんでした。このコマンドを再実行しました:
Install-Package Microsoft.AspNet.SignalR -pre
そしてそれはさらにいくつかの参照を追加しました:
それが行われると、それはチャンピオンのように機能しました!
参照に問題があります。以下をせよ:
AppStart /Bundle.Config.csに次を追加します。
bundles.Add(new ScriptBundle("~/bundles/signalR").Include(
"~/Scripts/jquery.signalR-{version}.js"));
Layout.cshtmlに次を追加します。
@ Scripts.Render( "〜/ bundles/signalR")
SignalRを使用しているページで、次のようにsignalRハブを参照していることを確認してください。
/ signalr/hubs
このページで行われているように: http://blog.devscrum.net/2011/12/getting-started-with-signalr-in-asp-net-mvc/ (セクション: "index.cshtmlに次のコードを追加してください")
私の場合、web.config appSettingsに、削除する必要のあるキーがありました。
<add key="owin:AutomaticAppStartup" value="false" />
私の場合、異なる場所に同じ名前の2つのハブクラス(ハブから派生した2つのクラス)を誤って作成しました。 1つ削除すると、すべて機能しました。
[HubName("MyHub")]
を[HubName("myHub")]
に変更してみて、JavaScriptでプロキシを作成する場所で必ず更新してください。それは過去に私のために働いた。