SignalR トラブルシューティングSignalR Troubleshooting

提供者: Patrick Fletcherby Patrick Fletcher


この記事では、ASP.NET SignalR を指します。This article refers to ASP.NET SignalR. SignalR を使用して、Java、Node.js、またはサーバーレス シナリオでは、リアルタイムのシナリオを有効にする方法と思う場合を見てASP.NET Core SignalRします。If you're thinking about using SignalR to enable real-time scenarios with Java, Node.js, or in a serverless scenario, take a look at ASP.NET Core SignalR. 既に ASP.NET SignalR を使用した場合を見て、のバージョンの違いバージョンの違いと ASP.NET Core SignalR での機能強化を理解するページ。If you've already used ASP.NET SignalR, take a look at the version differences page to understand the differences in the versions and the improvements in ASP.NET Core SignalR. 最後に、Microsoft Azure でリアルタイム アプリを実行することがわかっている場合を見て、 Azure SignalR サービスなど、アプリを必要とすると、クラウド ベースのスケール アウトを提供します。Finally, if you know you'll be running your real-time apps in Microsoft Azure, take a look at the Azure SignalR Service, as it provides cloud-based scale-out once your apps need it.

このドキュメントでは、SignalR を使って一般的な問題のトラブルシューティングについて説明します。This document describes common troubleshooting issues with SignalR.

このトピックで使用されるソフトウェアのバージョンSoftware versions used in this topic

このトピックの以前のバージョンPrevious versions of this topic

SignalR の以前のバージョンについては、次を参照してください。以前のバージョンの SignalRします。For information about earlier versions of SignalR, see SignalR Older Versions.

意見やご質問Questions and comments

このチュートリアルの良い点に関するフィードバックや、ページ下部にあるコメントで改善できる点をお知らせください。Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. チュートリアルに直接関係のない質問がある場合は、ASP.NET SignalR フォーラムまたはStackOverflow.comにて投稿してください。If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or

このドキュメントには、次のセクションが含まれています。This document contains the following sections.

サイレント モードでが失敗したクライアントとサーバー間のメソッドの呼び出しCalling methods between the client and server silently fails

このセクションでは、意味のあるエラー メッセージを表示せずに失敗するには、クライアントとサーバー間のメソッド呼び出しの考えられる原因について説明します。This section describes possible causes for a method call between client and server to fail without a meaningful error message. SignalR アプリケーションで、サーバーに関する情報がない。 クライアントを実装する方法サーバーは、クライアント メソッドを呼び出しとメソッドの名前とパラメーターのデータがクライアントに送信される、メソッドが実行されるは、サーバーが指定した形式である場合にのみ。In a SignalR application, the server has no information about the methods that the client implements; when the server invokes a client method, the method name and parameter data are sent to the client, and the method is executed only if it exists in the format that the server specified. 一致するメソッドが検出されないクライアントでは、何も起こりません、サーバー上のエラー メッセージが発生しなかった場合は。If no matching method is found on the client, nothing happens, and no error message is raised on the server.

クライアント メソッドが呼び出されない作業をさらに調査するには、どのような呼び出しを表示するハブの start メソッドは、サーバーから送信される呼び出しの前にログ記録にできます。To further investigate client methods not getting called, you can turn on logging before the calling the start method on the hub to see what calls are coming from the server. JavaScript アプリケーションでのログ記録を有効にするのを参照してください。クライアント側のログ記録 (JavaScript クライアントのバージョン) を有効にする方法します。To enable logging in a JavaScript application, see How to enable client-side logging (JavaScript client version). .NET クライアント アプリケーションでのログ記録を有効にするのを参照してください。クライアント側のログ記録 (.NET クライアントのバージョン) を有効にする方法します。To enable logging in a .NET client application, see How to enable client-side logging (.NET Client version).

スペルの正しくないメソッド、不適切なメソッドのシグネチャ、または不適切なハブの名前Misspelled method, incorrect method signature, or incorrect hub name

名前または呼び出されたメソッドのシグネチャが一致しない場合、クライアント上の適切なメソッド、呼び出しは失敗します。If the name or signature of a called method does not exactly match an appropriate method on the client, the call will fail. メソッド名がサーバーによって呼び出されますが、クライアント上のメソッドの名前と一致することを確認します。Verify that the method name called by the server matches the name of the method on the client. また、SignalR は camel 形式のメソッドを使用するハブ プロキシを作成します。 JavaScript では、そのため、メソッドと呼ばれますSendMessageサーバーでが呼び出されますsendMessageクライアント プロキシで。Also, SignalR creates the hub proxy using camel-cased methods, as is appropriate in JavaScript, so a method called SendMessage on the server would be called sendMessage in the client proxy. 使用する場合、HubNameサーバー側コードで属性を使用する名前が、クライアントで、ハブの作成に使用する名前と一致していることを確認します。If you use the HubName attribute in your server-side code, verify that the name used matches the name used to create the hub on the client. 使用しない場合、HubName属性、JavaScript クライアント内でハブの名前が ChatHub ではなく chatHub など、キャメル形式で表記であることを確認します。If you do not use the HubName attribute, verify that the name of the hub in a JavaScript client is camel-cased, such as chatHub instead of ChatHub.

クライアント上のメソッド名が重複していますDuplicate method name on client

大文字小文字によってのみとは異なるクライアントで重複するメソッドがないことを確認します。Verify that you do not have a duplicate method on the client that differs only by case. 場合は、クライアント アプリケーションがある呼び出されるメソッドsendMessage、いないというメソッドもを確認してSendMessageもします。If your client application has a method called sendMessage, verify that there isn't also a method called SendMessage as well.

クライアントで不足している JSON のパーサーMissing JSON parser on the client

SignalR では、JSON パーサーは、サーバーとクライアント間の呼び出しをシリアル化するために必要です。SignalR requires a JSON parser to be present to serialize calls between the server and the client. クライアントが (Internet Explorer 7 の場合) などの組み込み JSON パーサーを持っていない場合は、アプリケーションのいずれかに含める必要があります。If your client doesn't have a built-in JSON parser (such as Internet Explorer 7), you'll need to include one in your application. JSON パーサーをダウンロードするここします。You can download the JSON parser here.

ハブおよび PersistentConnection 構文を混在させるMixing Hub and PersistentConnection syntax

SignalR では、2 つの間の通信モデルを使用します。ハブおよび PersistentConnections します。SignalR uses two communication models: Hubs and PersistentConnections. これらの 2 つの通信モデルを呼び出すための構文は、クライアント コードで異なります。The syntax for calling these two communication models is different in the client code. サーバー コードにハブを追加した場合は、すべてのクライアント コードは適切なハブの構文を使用することを確認します。If you have added a hub in your server code, verify that all of your client code uses the proper hub syntax.

JavaScript クライアント内で、PersistentConnection を作成する JavaScript クライアント コードJavaScript client code that creates a PersistentConnection in a JavaScript client

var myConnection = $.connection('/echo');

Javascript クライアント内でハブ プロキシを作成する JavaScript クライアント コードJavaScript client code that creates a Hub Proxy in a Javascript client

var myHub = $.connection.MyHub;

C# サーバー コードを PersistentConnection にルートをマップします。C# server code that maps a route to a PersistentConnection

RouteTable.Routes.MapConnection<MyConnection>("my", "/echo");

C#複数のアプリケーションがある場合、ハブ、または複数のハブ ルートをマップするサーバー コードC# server code that maps a route to a Hub, or to multiple hubs if you have multiple applications


サブスクリプションを追加する前に開始した接続Connection started before subscriptions are added

プロキシ サーバーから呼び出すことができるメソッドが追加される前に、ハブの接続が開始されると、メッセージが受信されません。If the Hub's connection is started before methods that can be called from the server are added to the proxy, messages will not be received. 次の JavaScript コードは、ハブを正しく開始できません。The following JavaScript code will not start the hub properly:

ハブのメッセージを受信することはできません。 JavaScript クライアント コードが正しくないです。Incorrect JavaScript client code that will not allow Hubs messages to be received

var chat = $.connection.chatHub;
$.connection.hub.start().done(function () {
    chat.client.broadcastMessage = function (name, message) {...};

代わりに、開始を呼び出す前に、メソッドのサブスクリプションを追加します。Instead, add the method subscriptions before calling Start:

ハブに誤ってサブスクリプションを追加する JavaScript クライアント コードJavaScript client code that correctly adds subscriptions to a hub

var chat = $.connection.chatHub;
chat.client.broadcastMessage = function (name, message) {...};
    $.connection.hub.start().done(function () {

ハブ プロキシのメソッド名がありません。Missing method name on the hub proxy

サーバーで定義されたメソッドがクライアントで購読していることを確認します。Verify that the method defined on the server is subscribed to on the client. 場合でも、サーバーは、メソッドを定義、クライアント プロキシにも追加する必要があります。Even though the server defines the method, it must still be added to the client proxy. メソッドは、次の方法でクライアント プロキシに追加できます (注、メソッドに追加される、clientハブのハブではなく直接のメンバー)。Methods can be added to the client proxy in the following ways (Note that the method is added to the client member of the hub, not the hub directly):

ハブ プロキシのメソッドを追加する JavaScript クライアント コードJavaScript client code that adds methods to a hub proxy

// Method added to proxy in JavaScript:
myHubProxy.server.method1 = function (param1, param2) {...};
//Multiple methods added to proxy in JavaScript using jQuery:
$.extend(myHubProxy.server, {
    method1: function (param1, param2) {...},
    method2: function (param3, param4) {...}

ハブまたはハブ メソッドをパブリックとして宣言されていませんHub or hub methods not declared as Public

クライアントに表示される、ハブの実装とメソッドとして宣言する必要がありますpublicします。To be visible on the client, the hub implementation and methods must be declared as public.

別のアプリケーションからハブへのアクセスAccessing hub from a different application

SignalR ハブは、SignalR クライアントを実装するアプリケーションからのみアクセスできます。SignalR Hubs can only be accessed through applications that implement SignalR clients. SignalR ことはできません (SOAP サービスまたは WCF web サービスです。) などの他の通信ライブラリとの相互運用します。ターゲット プラットフォームの使用可能な SignalR クライアントがない場合、サーバーのエンドポイントに直接アクセスすることはできません。SignalR cannot interoperate with other communication libraries (like SOAP or WCF web services.) If there is no SignalR client available for your target platform, you cannot access the server's endpoint directly.

手動でデータをシリアル化Manually serializing data

SignalR は自動的に JSON シリアル化に使用、メソッド パラメーターであるのなら自分自身でするのに必要ありません。SignalR will automatically use JSON to serialize your method parameters- there's no need to do it yourself.

リモートのハブ メソッドをクライアント OnDisconnected 関数では実行されません。Remote Hub method not executed on client in OnDisconnected function

この動作は意図されたものです。This behavior is by design. ときにOnDisconnectedが呼び出されると、ハブが既に入力、Disconnectedによりさらにハブ メソッドを呼び出せる状態。When OnDisconnected is called, the hub has already entered the Disconnected state, which does not allow further hub methods to be called.

OnDisconnected イベント内のコードを正しく実行 c# サーバー コードC# server code that correctly executes code in the OnDisconnected event

public class MyHub : Hub
    public override Task OnDisconnected()
        // Do what you want here
        return base.OnDisconnected();

一貫性のタイミングで発生しない OnDisconnectOnDisconnect not firing at consistent times

この動作は意図されたものです。This behavior is by design. ユーザーがアクティブな SignalR 接続に関するページから移動しようとすると、SignalR クライアントは、クライアント接続が停止されることをサーバーに通知するベストエフォートの試行を加えます。When a user attempts to navigate away from a page with an active SignalR connection, the SignalR client will then make a best-effort attempt to notify the server that the client connection will be stopped. SignalR クライアントのベスト エフォート場合は、サーバーに到達する試行が失敗した後、構成可能な接続の破棄は、サーバー、DisconnectTimeout時点で、後で、OnDisconnectedイベントが発生します。If the SignalR client's best-effort attempt fails to reach the server, the server will dispose of the connection after a configurable DisconnectTimeout later, at which time the OnDisconnected event will fire. 試行が成功すると、SignalR クライアントのベスト エフォートである場合、OnDisconnectedイベントは、すぐに発生します。If the SignalR client's best-effort attempt is successful, the OnDisconnected event will fire immediately.

設定の詳細について、DisconnectTimeout設定、表示接続の有効期間イベントを処理します。DisconnectTimeoutします。For information on setting the DisconnectTimeout setting, see Handling connection lifetime events: DisconnectTimeout.

接続の上限に達しましたConnection limit reached

Windows 7 などのクライアント オペレーティング システムでの完全版の IIS を使用する場合は、10 接続制限が適用されます。When using the full version of IIS on a client operating system like Windows 7, a 10-connection limit is imposed. クライアント OS を使用して、IIS Express 代わりに使用してこの制限を回避します。When using a client OS, use IIS Express instead to avoid this limit.

ドメイン間の接続が正しく設定されていませんCross-domain connection not set up properly

ドメイン間の接続の場合 (対象の SignalR URL が、ホスティング ページと同じドメインに接続) が正しくセットアップされていない、エラーが発生せず、接続が失敗します。If a cross-domain connection (a connection for which the SignalR URL is not in the same domain as the hosting page) is not set up correctly, the connection may fail without an error message. ドメイン間の通信を有効にする方法については、次を参照してください。ドメイン間の接続を確立する方法します。For information on how to enable cross-domain communication, see How to establish a cross-domain connection.

.NET クライアントで機能しない NTLM (Active Directory) を使用して接続Connection using NTLM (Active Directory) not working in .NET client

ドメインのセキュリティを使用する .NET クライアント アプリケーション内の接続が失敗する場合は、接続が正しく構成されていません。A connection in a .NET client application that uses Domain security may fail if the connection is not configured properly. SignalR を使用して、ドメイン環境で、次のように、必要な接続プロパティを設定します。To use SignalR in a domain environment, set the requisite connection property as follows:

接続の資格情報を実装する c# クライアント コードC# client code that implements connection credentials

connection.Credentials = CredentialCache.DefaultCredentials;

停止したクライアントを検出するためにピンポン IIS websocket を構成します。Configuring IIS websockets to ping/pong to detect a dead client

SignalR のサーバーがわからないかどうか、クライアントが切れているか、つまりから基になるための websocket 接続の失敗を通知に依存、OnCloseコールバック。SignalR servers don't know if the client is dead or not and they rely on notification from the underlying websocket for connection failures, that is, the OnClose callback. この問題を 1 つのソリューションでは、IIS websocket ping/pong な作業を構成します。One solution to this problem is to configure IIS websockets to do the ping/pong for you. これにより、予期せず中断の場合、接続が閉じられます。This ensures that your connection will close if it breaks unexpectedly. 詳細については、次を参照してください。この stackoverflow の投稿します。For more information see this stackoverflow post.

その他の接続の問題Other connection issues

このセクションでは、原因と解決策の特定の現象または接続中に発生するエラー メッセージについて説明します。This section describes the causes and solutions for specific symptoms or error messages that occur during a connection.

「スタートにはデータを送信する前に呼び出す必要があります」エラー"Start must be called before data can be sent" error

このエラーは、接続を開始する前に、コードが SignalR オブジェクトを参照している場合によく見られます。This error is commonly seen if code references SignalR objects before the connection is started. ハンドラーなどのワイヤアップがメソッドの呼び出し、サーバーで定義されている必要があります追加されること、接続が完了した後。The wireup for handlers and the like that will call methods defined on the server must be added after the connection completes. なおへの呼び出しStartは前に、呼び出しを実行することが後のコードが完了するために非同期でします。Note that the call to Start is asynchronous, so code after the call may be executed before it completes. 接続が完全に開始した後、ハンドラーを追加する最善の方法は、start メソッドにパラメーターとして渡されるコールバック関数には。The best way to add handlers after a connection starts completely is to put them into a callback function that is passed as a parameter to the start method:

正しく SignalR オブジェクトを参照するイベント ハンドラーを追加する JavaScript クライアント コードJavaScript client code that correctly adds event handlers that reference SignalR objects

$.connection.hub.start().done(function () {
    // Wire up Send button to call NewContosoChatMessage on the server.
    $('#newContosoChatMessage').click(function () {
            $('#displayname').val(), $('#message').val());

このエラーは、SignalR オブジェクトはまだ参照されているときに、接続が停止した場合にも表示されます。This error will also be seen if a connection stops while SignalR objects are still being referenced.

「301 は完全に移動されました」または「302 が一時的に移動されました」エラー"301 Moved Permanently" or "302 Moved Temporarily" error

このエラーは、プロジェクトには、SignalR で、自動的に作成されたプロキシが干渉をという名前のフォルダーが含まれている場合に発生する可能性があります。This error may be seen if the project contains a folder called SignalR, which will interfere with the automatically-created proxy. このエラーを回避するために使用しないでくださいという名前のフォルダーSignalRアプリケーション、または有効にする自動プロキシの生成をオフにします。To avoid this error, do not use a folder called SignalR in your application, or turn automatic proxy generation off. 参照してください、生成されたプロキシとは何をの詳細。See The Generated Proxy and what it does for you for more details.

.NET または Silverlight クライアントに「403 アクセス不可」エラー"403 Forbidden" error in .NET or Silverlight client

このエラーは、ドメイン間の通信が正しく有効化しないクロス ドメイン環境で発生する可能性があります。This error may occur in cross-domain environments where cross-domain communication is not properly enabled. ドメイン間の通信を有効にする方法については、次を参照してください。ドメイン間の接続を確立する方法します。For information on how to enable cross-domain communication, see How to establish a cross-domain connection. Silverlight クライアントでのドメイン間の接続を確立するを参照してください。 Silverlight クライアントからのドメインを越えた接続します。To establish a cross-domain connection in a Silverlight client, see Cross-domain connections from Silverlight clients.

「404 見つかりません」エラー"404 Not Found" error

この問題のいくつかの原因があります。There are several causes for this issue. 次のすべてを確認します。Verify all of the following:

  • ハブ プロキシのアドレス リファレンス形式が正しくありません。 このエラーは生成されたハブ プロキシのアドレスへの参照が正しくフォーマットされていない場合によく見られます。Hub proxy address reference not formatted correctly: This error is commonly seen if the reference to the generated hub proxy address is not formatted correctly. ハブ アドレスへの参照が正しく行われたことを確認します。Verify that the reference to the hub address is made properly. 参照してください動的に生成されたプロキシを参照する方法詳細についてはします。See How to reference the dynamically generated proxy for details.

  • ハブ ルートを追加する前にアプリケーションへのルートの追加。 アプリケーションでは、他のルートを使用する場合、最初のルートが追加の呼び出しの確認MapSignalRします。Adding routes to application before adding the hub route: If your application uses other routes, verify that the first route added is the call to MapSignalR.

  • IIS 7 または 7.5、更新プログラムがないを使用して、拡張子のない Url: IIS 7 または 7.5 を使用して、サーバーにハブの定義へのアクセスを提供できるように、拡張子のない Url の更新プログラムを必要/signalr/hubsします。Using IIS 7 or 7.5 without the update for extensionless URLs: Using IIS 7 or 7.5 requires an update for extensionless URLs so that the server can provide access to the hub definitions at /signalr/hubs. 更新プログラムが見つかりますここします。The update can be found here.

  • IIS のキャッシュ期限切れであるか、または壊れています。 キャッシュの内容が有効期限が切れていないことを確認するには、キャッシュをクリアする PowerShell ウィンドウで、次のコマンドを入力します。IIS cache out of date or corrupt: To verify that the cache contents are not out of date, enter the following command in a PowerShell window to clear the cache:

    net stop w3svc
    Remove-Item -Path "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\*" -Force -Recurse
    net start w3svc

「500 内部サーバー エラー」"500 Internal Server Error"

これは、さまざまな原因の可能性がある非常に一般的なエラーです。This is a very generic error that could have a wide variety of causes. エラーの詳細については、サーバーのイベント ログに記録する必要があります。 またはサーバーのデバッグを確認できます。The details of the error should appear in the server's event log, or can be found through debugging the server. サーバーの詳細なエラーを有効にして、詳細なエラー情報を取得できます。More detailed error information may be obtained by turning on detailed errors on the server. 詳細については、次を参照してください。ハブ クラス内のエラーの処理方法します。For more information, see How to handle errors in the Hub class.

ファイアウォールまたはプロキシが正しく構成されていない、書き換え要求ヘッダーの原因の場合、このエラーは発生も一般的です。This error is also commonly seen if a firewall or proxy is not configured properly, causing the request headers to be rewritten. ソリューションでは、ファイアウォールまたはプロキシのポート 80 が有効であるかどうかを確認します。The solution is to make sure that port 80 is enabled on the firewall or proxy.

"予期しない応答コード。500""Unexpected response code: 500"

このエラーは、アプリケーションで使用される .NET framework のバージョンが Web.Config で指定されたバージョンと一致しない場合に発生する可能性があります。このソリューションでは、.NET 4.5 がアプリケーションの設定と、Web.Config ファイルの両方で使用されていることを確認します。This error may occur if the version of .NET framework used in the application does not match the version specified in Web.Config. The solution is to verify that .NET 4.5 is used in both the application settings and the Web.Config file.

"TypeError: <hubType>が定義されていません"エラー"TypeError: <hubType> is undefined" error

このエラーが発生する呼び出しMapSignalRが正しく行われていません。This error will result if the call to MapSignalR is not made properly. 参照してくださいSignalR ミドルウェアを登録し、SignalR のオプションを構成する方法詳細についてはします。See How to register SignalR Middleware and configure SignalR options for more information.

JsonSerializationException がユーザー コードでハンドルされませんでした。JsonSerializationException was unhandled by user code

パラメーター、メソッドに送信するには、シリアル化できない型 (ファイル ハンドル、データベース接続など) が含まれていないことを確認します。Verify that the parameters you send to your methods do not include non-serializable types (like file handles or database connections). 使用 (またはセキュリティのためのシリアル化の理由から)、クライアントに送信したくないのサーバー側オブジェクトにメンバーを使用する必要がある場合、JSONIgnore属性。If you need to use members on a server-side object that you don't want to be sent to the client (either for security or for reasons of serialization), use the JSONIgnore attribute.

"プロトコル エラー。不明なトランスポートは"エラー"Protocol error: Unknown transport" error

このエラーは、クライアントは SignalR を使用するトランスポートをサポートしていない場合に発生する可能性があります。This error may occur if the client does not support the transports that SignalR uses. 参照してくださいトランスポートとフォールバックについてを SignalR でブラウザーを使用できます。See Transports and Fallbacks for information on which browsers can be used with SignalR.

「JavaScript ハブ プロキシの生成が無効になっています。」"JavaScript Hub proxy generation has been disabled."

このエラーが発生DisableJavaScriptProxiesで動的に生成されたプロキシへの参照を含むも中に設定されているsignalr/hubsします。This error will occur if DisableJavaScriptProxies is set while also including a reference to the dynamically generated proxy at signalr/hubs. プロキシを手動で作成する方法の詳細については、次を参照してください。 、生成されたプロキシとは何がします。For more information on creating the proxy manually, see The generated proxy and what it does for you.

「接続 ID は形式が正しくありません」または「ユーザー id は、SignalR のアクティブな接続中に変更できません」エラー"The connection ID is in the incorrect format" or "The user identity cannot change during an active SignalR connection" error

このエラーは、認証を使用して、接続が停止する前に、クライアントがログアウトした場合に発生する可能性があります。This error may be seen if authentication is being used, and the client is logged out before the connection is stopped. ソリューションでは、クライアントをログアウトする前に SignalR 接続を停止します。The solution is to stop the SignalR connection before logging the client out.

"エラーをキャッチできません。SignalR: jQuery not found."Uncaught Error: SignalR: jQuery not found. SignalR.js ファイルの前に jQuery が参照されていることを確認してください"のエラーPlease ensure jQuery is referenced before the SignalR.js file" error

SignalR JavaScript クライアントでは、jQuery を実行する必要があります。The SignalR JavaScript client requires jQuery to run. JQuery への参照が使用されるパスが有効であるおよび SignalR への参照を前に jQuery への参照が正しいことを確認します。Verify that your reference to jQuery is correct, that the path used is valid, and that the reference to jQuery is before the reference to SignalR.

"TypeError をキャッチできません。プロパティを読み取ることができません '<プロパティ>' 未定義の"エラー"Uncaught TypeError: Cannot read property '<property>' of undefined" error

このエラーは、jQuery またはハブ プロキシを適切に参照されていないことから発生します。This error results from not having jQuery or the hubs proxy referenced properly. JQuery、およびハブ プロキシへの参照が使用されるパスが有効であると、ハブ プロキシへの参照を前に jQuery への参照が正しいことを確認します。Verify that your reference to jQuery and the hubs proxy is correct, that the path used is valid, and that the reference to jQuery is before the reference to the hubs proxy. ハブ プロキシを既定の参照は、次のようになります。The default reference to the hubs proxy should look like the following:

ハブ プロキシを正しく参照する HTML クライアント側のコードHTML client-side code that correctly references the Hubs proxy

<script src="/signalr/hubs"></script>

「RuntimeBinderException はユーザー コードで未処理でした」エラー"RuntimeBinderException was unhandled by user code" error

このエラーが発生する場合の正しくないオーバー ロードHub.On使用されます。This error may occur when the incorrect overload of Hub.On is used. メソッドの戻り値の場合、戻り値の型がジェネリック型パラメーターとして指定する必要があります。If the method has a return value, the return type must be specified as a generic type parameter:

(生成されたプロキシは) を使用せず、クライアントで定義されたメソッドMethod defined on the client (without generated proxy)

MyHub.On<ReturnType>("MethodName", LocalMethod);

接続 ID が一貫性のあるか、ページ読み込みの間で接続が切断Connection ID is inconsistent or connection breaks between page loads

この動作は意図されたものです。This behavior is by design. ハブ オブジェクトは、page オブジェクトでホストされている、ため、ハブは、ページが更新されると破棄されます。Since the hub object is hosted in the page object, the hub is destroyed when the page refreshes. 複数ページのアプリケーションは、ページ読み込みの間の一貫性になるように、ユーザーと接続 Id 間の関連付けを維持する必要があります。A multi-page application needs to maintain the association between users and connection IDs so that they will be consistent between page loads. 接続 Id は、いずれかで、サーバーに格納できる、ConcurrentDictionaryオブジェクトまたはデータベース。The connection IDs can be stored on the server in either a ConcurrentDictionary object or a database.

「値を null にすることはできません」エラー"Value cannot be null" error

省略可能なパラメーターを持つサーバー側のメソッドは現在サポートされていません。省略可能なパラメーターを省略した場合、メソッドは失敗します。Server-side methods with optional parameters are not currently supported; if the optional parameter is omitted, the method will fail. 詳細については、次を参照してください。省略可能なパラメーターします。For more information, see Optional Parameters.

"Firefox でサーバーへの接続を確立できません<アドレス>"Firebug でのエラー"Firefox can't establish a connection to the server at <address>" error in Firebug

このエラー メッセージは、WebSocket トランスポートのネゴシエーションは失敗し、他のトランスポートが代わりに使用される場合、Firebug で確認できます。This error message can be seen in Firebug if negotiation of the WebSocket transport fails and another transport is used instead. この動作は意図されたものです。This behavior is by design.

.NET クライアント アプリケーションで「リモート証明書が検証の手順に従って無効です」エラー"The remote certificate is invalid according to the validation procedure" error in .NET client application

場合は、サーバーでは、要求が行われる前に、接続に x509certificate を追加することができますし、カスタムのクライアント証明書が必要です。If your server requires custom client certificates, then you can add an x509certificate to the connection before the request is made. 接続を使用して、証明書を追加Connection.AddClientCertificateします。Add the certificate to the connection using Connection.AddClientCertificate.

認証のタイムアウト後の接続を削除しますConnection drops after authentication times out

この動作は意図されたものです。This behavior is by design. 接続がアクティブになったときに、認証資格情報を変更することはできません。資格情報を更新するには、接続を停止および再起動してする必要があります。Authentication credentials cannot be modified while a connection is active; to refresh credentials, the connection must be stopped and restarted.

OnConnected が jQuery Mobile を使用する場合に 2 回呼び出されますOnConnected gets called twice when using jQuery Mobile

Mobile を jQueryinitializePage関数は、再実行するには、各ページのスクリプトは、2 番目の接続を作成します。jQuery Mobile's initializePage function forces the scripts in each page to be re-executed, thus creating a second connection. この問題のソリューションは次のとおりです。Solutions for this issue include:

  • JQuery Mobile、JavaScript ファイルへの参照が含まれます。Include the reference to jQuery Mobile before your JavaScript file.
  • 無効にする、initializePage関数を設定して$.mobile.autoInitializePage = falseします。Disable the initializePage function by setting $.mobile.autoInitializePage = false.
  • 接続を開始する前に初期化を完了してページを待機します。Wait for the page to finish initializing before starting the connection.

サーバー送信イベントを使用して Silverlight アプリケーションでメッセージが遅延します。Messages are delayed in Silverlight applications using Server Sent Events

Silverlight でイベントを送信するサーバーを使用する場合、メッセージが遅延します。Messages are delayed when using server sent events on Silverlight. 長い代わりに使用するポーリングを強制するには、接続を開始するときに、次を使用します。To force long polling to be used instead, use the following when starting the connection:

connection.Start(new LongPollingTransport());

プロトコルのフレーム「アクセス許可が拒否されました」を使用して永久に"Permission Denied" using Forever Frame protocol

これは既知の問題で説明されているここします。This is a known issue, described here. この現象は、最新 JQuery ライブラリを使用して表示する可能性があります。回避策では、JQuery 1.8.2 にアプリケーションをダウン グレードします。This symptom may be seen using the latest JQuery library; the workaround is to downgrade your application to JQuery 1.8.2.

"InvalidOperationException:有効な web ソケット要求されません。"InvalidOperationException: Not a valid web socket request.

このエラーは、WebSocket プロトコルを使用すると、ネットワーク プロキシが要求ヘッダーを変更する場合に発生する可能性があります。This error may occur if the WebSocket protocol is used, but the network proxy is modifying the request headers. ソリューションでは、ポート 80 で WebSocket を許可するプロキシを構成します。The solution is to configure the proxy to allow WebSocket on port 80.

"例外:<メソッド名>メソッドを解決できませんでした"クライアントがサーバーでメソッドを呼び出すと"Exception: <method name> method could not be resolved" when client calls method on server

このエラーは、配列などの JSON ペイロードを検出できないデータ型の使用から発生します。This error can result from using data types that cannot be discovered in a JSON payload, such as Array. 回避策では、IList などの JSON で検出可能なデータ型を使用します。The workaround is to use a data type that is discoverable by JSON, such as IList. 詳細については、次を参照してください。 .NET クライアントの配列パラメーターを持つハブ メソッドを呼び出すことができませんします。For more information, see .NET Client unable to call hub methods with array parameters.

コンパイルとサーバー側のエラーCompilation and server-side errors

次のセクションには、コンパイラとサーバー側のランタイム エラーの考えられる解決策が含まれています。The following section contains possible solutions to compiler and server-side runtime errors.

ハブ インスタンスへの参照が nullReference to Hub instance is null

接続ごとにハブ インスタンスが作成された後できませんインスタンスを作成するハブのコードで自分でします。Since a hub instance is created for each connection, you can't create an instance of a hub in your code yourself. ハブ自体では、外部からハブのメソッドを呼び出すを参照してください。クライアント メソッドを呼び出すと、ハブ クラスの外部からグループを管理する方法のハブ コンテキストへの参照を取得する方法。To call methods on a hub from outside the hub itself, see How to call client methods and manage groups from outside the Hub class for how to obtain a reference to the hub context.

HTTPContext.Current.Session が nullHTTPContext.Current.Session is null

この動作は意図されたものです。This behavior is by design. 双方向メッセージング中断は、セッション状態を有効にするため、SignalR は ASP.NET セッション状態をサポートしません。SignalR does not support the ASP.NET session state, since enabling the session state would break duplex messaging.

オーバーライドする適切なメソッドはありません。No suitable method to override

以前のドキュメントまたはブログからのコードを使用している場合は、このエラーを参照してください可能性があります。You may see this error if you are using code from older documentation or blogs. 変更または非推奨とされているメソッドの名前を参照していないことを確認します (などOnConnectedAsync)。Verify that you are not referencing names of methods that have been changed or deprecated (like OnConnectedAsync).

HostContextExtensions.WebSocketServerUrl が nullHostContextExtensions.WebSocketServerUrl is null

この動作は意図されたものです。This behavior is by design. このメンバーは非推奨とされますは使用できません。This member is deprecated and should not be used.

「'Signalr.hubs' という名前のルートは既にルート コレクションがいます」エラー"A route named 'signalr.hubs' is already in the route collection" error

場合、このエラーが発生するMapSignalRは、アプリケーションによって 2 回呼び出されます。This error will be seen if MapSignalR is called twice by your application. いくつかの例のアプリケーション呼び出しMapSignalR直接スタートアップ クラスで他のユーザー呼び出しを行うラッパー クラスにします。Some example applications call MapSignalR directly in the Startup class; others make the call in a wrapper class. アプリケーションはないこと両方を確認します。Ensure that your application does not do both.

WebSocket が使用されません。WebSocket is not used

サーバーとクライアントが WebSocket の要件を満たしていることを確認した場合 (記載、サポートされているプラットフォームドキュメント)、サーバーで WebSocket を有効にする必要があります。If you have verified that your server and clients meet the requirements for WebSocket (listed in the Supported Platforms document), you will need to enable WebSocket on your server. これを行うための手順を参照してここします。Instructions for doing this can be found here.

$.connection が定義されていません$.connection is undefined

このエラーは、ページ上のスクリプトが正常に読み込まれていないまたはハブ プロキシに到達できないか、正しくアクセスしていることを示します。This error indicates that either the scripts on a page are not being loaded properly, or the hub proxy is not reachable or is being accessed incorrectly. ページのスクリプト参照がプロジェクトに読み込まれたスクリプトに対応していると、サーバーが実行されているときに、/signalr/hubs をブラウザーでアクセスできることを確認します。Verify that the script references on your page correspond to the scripts loaded in your project, and that /signalr/hubs can be accessed in a browser when the server is running.

動的な式のコンパイルに必要な 1 つまたは複数の種類が見つかりませんOne or more types required to compile a dynamic expression cannot be found

このエラーには、ことを示します、Microsoft.CSharpライブラリがありません。This error indicates that the Microsoft.CSharp library is missing. 追加することで、アセンブリ ->Framework タブ。Add it in the Assemblies->Framework tab.

Visual Basic または厳密に型指定されたハブ; Clients.Caller から呼び出し元の状態にアクセスできません。「型 'Task (Of Object)' を 'String' を型に変換が無効です」エラーCaller state cannot be accessed from Clients.Caller in Visual Basic or in a strongly typed hub; "Conversion from type 'Task(Of Object)' to type 'String' is not valid" error

Visual basic、または厳密に型指定されたハブに呼び出し元の状態にアクセスするには、使用、 Clients.CallerState (SignalR 2.1 で導入) の代わりにプロパティClients.Callerします。To access caller state in Visual Basic or in a strongly typed hub, use the Clients.CallerState property (introduced in SignalR 2.1) instead of Clients.Caller.

Visual Studio の問題Visual Studio issues

このセクションでは、Visual Studio で発生する問題について説明します。This section describes issues encountered in Visual Studio.

ソリューション エクスプ ローラーでスクリプト ドキュメントのノードが表示されません。Script Documents node does not appear in Solution Explorer

チュートリアルの一部を実行するデバッグ中にソリューション エクスプ ローラーで [スクリプト ドキュメント] ノードに送る。Some of our tutorials direct you to the "Script Documents" node in Solution Explorer while debugging. このノードは、JavaScript デバッガーによって生成され、Internet explorer のブラウザー クライアントのデバッグ中にのみ表示されます。Chrome または Firefox を使用する場合は、ノードは表示されません。This node is produced by the JavaScript debugger, and will only appear while debugging browser clients in Internet Explorer; the node will not appear if Chrome or Firefox are used. JavaScript デバッガーも実行されません、Silverlight デバッガーなど、別のクライアントのデバッガーが実行されている場合。The JavaScript debugger will also not run if another client debugger is running, such as the Silverlight debugger.

SignalR では、Visual Studio 2008 またはそれ以前は機能しませんSignalR does not work on Visual Studio 2008 or earlier

この動作は意図されたものです。This behavior is by design. SignalR には、.NET Framework 4 以降が必要です。これは、Visual Studio 2010 以降に SignalR アプリケーションを開発することが必要です。SignalR requires .NET Framework 4 or later; this requires that SignalR applications be developed in Visual Studio 2010 or later. SignalR のサーバー コンポーネントでは、.NET Framework 4.5 が必要です。The server component of SignalR requires .NET Framework 4.5.

IIS の問題IIS issues

このセクションには、インターネット インフォメーション サービスの問題が含まれています。This section contains issues with Internet Information Services.

Visual Studio 開発サーバーで、IIS ではなく、SignalR worksSignalR works on Visual Studio development server, but not in IIS

IIS 7.0 および 7.5、SignalR がサポートされていますが、サポート拡張子のない Url を追加する必要があります。SignalR is supported on IIS 7.0 and 7.5, but support for extensionless URLs must be added. 拡張子のない Url のサポートを追加するを参照してください。 add support for extensionless URLs, see

SignalR では、ASP.NET (ASP.NET がインストールされていない IIS で既定で) サーバーにインストールする必要があります。SignalR requires ASP.NET to be installed on the server (ASP.NET is not installed on IIS by default). ASP.NET をインストールするを参照してください。 ASP.NET ダウンロードします。To install ASP.NET, see ASP.NET Downloads.

Microsoft Azure を発行します。Microsoft Azure issues

このセクションには、Microsoft Azure での問題が含まれています。This section contains issues with Microsoft Azure.

FileLoadException Azure ワーカー ロールで SignalR をホストする場合FileLoadException when hosting SignalR in an Azure Worker Role

例外で、Azure Worker ロールで SignalR をホストしている可能性があります"ファイルまたはアセンブリを読み込むことができません ' Microsoft.Owin、バージョン を ="。Hosting SignalR in an Azure Worker Role might result in the exception "Could not load file or assembly 'Microsoft.Owin, Version=". これは、NuGet の既知の問題バインド リダイレクトは、Azure ワーカー ロール プロジェクトでは自動的に追加されません。This is a known issue with NuGet; Binding redirects are not added automatically in Azure Worker Role projects. これを解決するには、バインド リダイレクトを手動で追加することができます。To fix this, you can add the binding redirects manually. 次の行を追加、app.configのワーカー ロール プロジェクトのファイル。Add the following lines to the app.config file for your Worker Role project.

  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="" newVersion="" />
      <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
      <bindingRedirect oldVersion="" newVersion="" />

メッセージがトピック名を変更した後は Azure のバック プレーンを介して受信されていません。Messages are not received through the Azure backplane after altering topic names

Azure のバック プレーンで使用されるトピックが内部的に保持されます。ユーザー構成可能にするものではありません。The topics used by the Azure backplane are maintained internally; they are not intended to be user-configurable.