SignalRには、クライアントからのサーバー側ハブメソッド呼び出しが成功したかどうかを確認するために使用できるクライアント側のロジックがあります。
まず、接続障害を処理するために、ハブ接続でエラーハンドラーを使用できます(https://github.com/SignalR/SignalR/issues/404#issuecomment-6754425、http://www.asp.net/signalr /overview/guide-to-the-api/hubs-api-guide-javascript-client)このように:
$.connection.hub.error(function() {
console.log('An error occurred...');
});
したがって、サーバー側でこれを実装してシナリオを再作成すると、次のようになります。
public bool AddThing(Thing thing)
{
return true;
}
public class Thing
{
public Double Foo { get; set; }
}
..次に、クライアント側からこれを呼び出します。
myHub.addThing({"Foo":"Bar"});
error
処理関数が呼び出され、テキストがAn error occurred...
コンソールに出力されます。
サーバーでメソッドを呼び出すとjQueryの遅延オブジェクト(https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client-Hubs)が返されるため、いくつかのコールバックをチェーンできます。呼び出しから返されるオブジェクト。たとえば、ドキュメントには次のサンプルがあります。
myHub.someMethod()
.done(function(result) {
})
.fail(function(error) {
});
fail
ただし、ハブの呼び出し中にエラーが発生した場合にのみ呼び出されることに注意してください(たとえば、サーバー側のメソッド内で例外がスローされます) -https://github.com/SignalR/SignalR/issues/404#issuecomment-6754425。
最後の注意-これは興味深い質問だと思います。なぜなら、私が見ているように、例外をスローするのはJSONシリアライザーだからです-たとえば、あなたの場合:
Newtonsoft.Json.JsonSerializationException: Error converting value "Bar" to type 'System.Double'. Line 1, position 54. ---> System.FormatException:
...しかし確かに、このシナリオを処理するために上記で説明した方法よりも優れた方法があるとしたら、興味深いかもしれません。たとえば、どのハブ呼び出しが原因であるかを正確に知ることができます500 Internal Server Error
。