MVC4アプリケーションでVisualStudio 2012 Ultimate RC、SignalR 0.5.1、およびJquery1.7.2を使用しています。
私は見ました: MVC4 SignalR "signalr/hubs" 501 Not Implemented Error
しかし、それは私の問題には影響しません(私はIIS Expressを使用してデバッグしています)。
SignalRを利用しようとすると、$。connection変数が定義されていません。私のサーバーサイドコード:
[HubName("tenantHub")]
public class TenantHub : Hub
{
...
void TenantChange(CrudAction action, Tenant tenant)
{
Clients.eventOccurred(action.ToString(), tenant);
}
}
クライアント側:
$(function() { var test = $.connection.tenantHub; });
クライアント側のSignalR/hubs
が参照されており、JSコードを確認できますが、エラーはスローされません。ただし、$。connectionを参照すると、Uncaught TypeError: Cannot read property 'tenantHub' of undefined
がスローされます。また、デフォルトのチャットの例を実行しようとすると、同じエラーが発生します。 VS2012で使用する場合、SignalRはサポートされていませんか、それとも私は愚かですか?
クラスから[HubName("tenantHub")]
を削除してみてください。私がそこにそれらを持っていたら、私のものは機能しませんでした。また、プロジェクトのルートにある"Hubs"
というフォルダーにハブを配置してみてください。
Global.asax.csからBundleConfig.RegisterBundles(BundleTable.Bundles);
を削除してみて、それが役立つかどうかを確認してください。
これは通常、jQueryを2回ロードしたことが原因で発生しました。通常、私たちはフッターにjQueryをロードする習慣があります。 Signalrが文句を言って、signalr-x.jsの前にjQueryライブラリを含めるように強制するため。
Signalr-x.jsの前にjQueryを含めることができます。また、jQueryプラグインを含めるフッターで次のようなことを行って、2回ロードしないようにすることができます。
<script type="text/javascript">
!window.jQuery && document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"><\/script>');
!window.jQuery && document.write('<script src="/public/js/vendor/jquery-1.9.1.min.js"><\/script>');
</script>
お役に立てれば。 :)
VS2012RTMでも同じ問題が発生しました。
問題は、最初にBundleConfig.csにSignalrを追加し、それが正常に機能することを期待していたことでした。しかし、ブラウザで「ソースの表示」を使用すると、jquery.jsの前にsignalr.jsが含まれていることに気付きました。 signalr.jsはページの上部に含まれ、jqueryはページの下部に含まれていました。
BundleConfigをいじった後、jquery.jsの後にsignalr.jsが含まれ、今ではsignalrが魅力のように機能します。
_Global.asax.cs
_のRouteTable.Routes.MapHubs();
の最初の項目としてApplication_Start()
を配置してみてください
これらのいずれも機能しない場合は、最終的なhtmlソースで、SignalRスクリプトへの参照がjQueryの後に表示されるだけでなく、バージョンがスクリプトフォルダーにある実際のファイルと一致することを確認してください。
<script src="~/Scripts/jquery.signalR-2.0.2.js"></script>
たとえば、これはSignalRの2.0.2バージョンと一致します。パッケージを介してSignalRをアップグレードする場合は、この行を手動で編集する必要があります。
ハブ名が重複していないことを確認してください。 [HubName( "tenantHub")]-同じ名前で装飾された2つ以上のハブクラスです。
私も同様の問題を抱えていました。私はVisualStudio 2010デバッグから作業していましたが、ローカルホスト(IIS7.5 Windows 7)では機能していませんでした。 「signalr/hubs」の定義に余分なスラッシュがあることがわかりました。「/ signalr/hubs」を使用していました。また、ブラウザーの互換性のためにJSON 2jsリファレンスを追加しました。 .jsを宣言する順序が重要であることに注意してください。
<script src="Scripts/JSON2.js" type="text/javascript"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.signalR-1.1.2.min.js" type="text/javascript"></script>
<script src="signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
この問題を見つけるために、次のようにロギングをオンにし、開発ツールのコンソールを調べて、ローカルホストにデプロイしたときのエラーを確認しました。
// Logs errors to the browser dev 'f12' console
$.connection.hub.logging = true;
これが他の誰かに役立つことを願っています。私は今、複数のPCでChrome、IE9、10で遊んでいます-なんて素晴らしいライブラリでしょう!
ジョンとは逆に、
Signalr/hubs宣言に/を追加する必要がありました
すなわち。
<script src="signalr/hubs" type="text/javascript"></script>
なりました
<script src="/signalr/hubs" type="text/javascript"></script>