サーバ:
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時間以上デバッグしていましたが、コードを単純化した後でも元に戻すことができません。
(スペルチェックは厳密にチェックされ、不一致はありません。)
サーバー側にいくつかの問題があることは明らかです。しかし、問題を調べるには、詳細なエラーを確認する必要があります。セキュリティ上の理由から、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エラーを確認するためのブラウザです。
それに関して他に問題がある場合はお知らせください。
追加情報については、次を参照してください: SignalR Errors
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
そして、現在の回避策は単純ではありません-ただ行って再構築してください。