web-dev-qa-db-ja.com

SignalR:ハブメソッド「XXX」の呼び出し中にエラーが発生しました

サーバ:

public void AddLine(string line)
{
    Clients.Others.addLine(line);
}

.NETクライアント:

await rtHubProxy.Invoke("AddLine", "lineInfo");

例外:

InvalidOperationException: There was an error invoking Hub method 'xxx.AddLine'.

実際、私は例外を見つけるためだけに、複雑なオブジェクトでメソッドを呼び出そうとしました。そのため、パラメーターの型を変更し、デバッグのためにAddLine()本体を空白のままにしましたが、奇妙なことに、それでも同じ例外がスローされました。

また、クライアント側で別のSignalR呼び出しがあり、上記の数行でエラーなしで応答します。対応するサーバー側コードは次のとおりです。

public void Hello(string text)
{
    Clients.All.hello(text);
}

誰かが私が間違っている場所を見つけることができますか?私は4時間以上デバッグしていましたが、コードを単純化した後でも元に戻すことができません。

(スペルチェックは厳密にチェックされ、不一致はありません。)

27
Isilmë O.

サーバー側にいくつかの問題があることは明らかです。しかし、問題を調べるには、詳細なエラーを確認する必要があります。セキュリティ上の理由から、SignalRはデフォルトでは詳細なエラーを表示しません。ただし、コードを編集して詳細なエラーを取得できます。

最初に、このコードをStartup.csに追加する必要があります。

var hubConfiguration = new HubConfiguration();
    hubConfiguration.EnableDetailedErrors = true;
    app.MapSignalR(hubConfiguration);

次に、クライアント側でエラーを表示するには、プロジェクトにこのコードを追加する必要があります。

$.connection.hub.error(function (error) {
    console.log('SignalR error: ' + error)
});

それと同じくらい簡単で、あなたは行ってもいいです。

時々、エラーを見るためにクライアント部分にさえ到達しません。ただし、最初の部分を実行することで、詳細エラーを有効にし、SignalR応答でエラーを確認できます。 Chrome Browser Web Developer Toolのようなツールが必要です。これは、すべてのデータ転送ステータスがログに記録される操作のネットワーク部分を提供します。SignalRエラーを確認できます。ログは非常に詳細で有用です。

これは、Chrome Chromeデバッグツールを介してSignalRエラーを確認するためのブラウザです。

フル画像サイズのダウンロード

This is for people who want to debug the ajax response through Chrome Browser

それに関して他に問題がある場合はお知らせください。

追加情報については、次を参照してください: SignalR Errors

62
Hirad Nikoo

OK、2時間半の岩の多いデバッグの後、私は最終的に真実を見つけました、不思議なことに気づきましたが、サーバー側のコードを変更したので、誤ってプロジェクトを再構築し、 IIS Expressを再度ウォームアップします。

SignalRのせいではなく、Visual Studioのせいです。 Hubクラスに変更を加えるたびに、サーバー側プロジェクトを再構築する必要があります。それでおしまい。私は言わなければならない、それは本当に痛い、私はこれがなぜ起こるのかわからないが-多分それは私のソリューションがうまくいかないWinRTとASP.NETプロジェクトで構成されているからでしょうか?知りません。

参考までに、同様の「再構築」問題が他の誰かに起こった投稿へのリンクを添付します。

http://forum.kooboo.com/yaf_postst2250_How-to-use-SignalR-in-a-Module.aspx

そして、現在の回避策は単純ではありません-ただ行って再構築してください。

2
Isilmë O.