3

SignalR を数日間いじってみましたが、これは驚異的なライブラリであると言わざるを得ません。私はそれを使っていくつかのことを行うことができ、その単純さに驚いていましたが、最近小さな問題に遭遇しました.

ブラウザーで JavaScript から Hub メソッドを呼び出すことができません。リクエストは 500 エラー コードを返します。エラー ページのソースを見ると、次のように表示されます。

[ArgumentNullException: Value cannot be null.
Parameter name: s]
System.IO.StringReader..ctor(String s) +10207225
Newtonsoft.Json.Linq.JObject.Parse(String json) +74
SignalR.Hubs.HubRequestParser.Parse(String data) +78
SignalR.Hubs.HubDispatcher.OnReceivedAsync(IRequest request, String connectionId,  String data) +266
SignalR.<>c__DisplayClass6.<ProcessRequestAsync>b__4(String data) +84
SignalR.Transports.ForeverTransport.ProcessSendRequest() +159
SignalR.Transports.ForeverTransport.ProcessRequestCore(ITransportConnection connection)  +149
SignalR.Transports.ForeverTransport.ProcessRequest(ITransportConnection connection) +42
SignalR.PersistentConnection.ProcessRequestAsync(HostContext context) +1087
SignalR.Hubs.HubDispatcher.ProcessRequestAsync(HostContext context) +251
SignalR.Hosting.AspNet.AspNetHandler.ProcessRequestAsync(HttpContextBase context) +656
SignalR.Hosting.AspNet.HttpTaskAsyncHandler.System.Web.IHttpAsyncHandler.BeginProcessReques t(HttpContext context, AsyncCallback cb, Object extraData) +143
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()  +9479007
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&  completedSynchronously) +178

私のサーバー側のコードは次のとおりです。

public class SourceHub : Hub
{
    public void RegisterSource(string source)
    {
        Groups.Add(Context.ConnectionId, source);
    }
}

そしてクライアント側では私は持っています:

var SourceHub = $.connection.sourceHub;
$.connection.hub.start().done(function () {
    SourceHub.registerSource("test");
});

私はしばらく掘り下げてきましたが、問題の原因を見つけることができません.誰かが私を助けてくれませんか?

4

2 に答える 2

4

序文: 私はこのプロジェクトの edobry のチームに属しており、バックエンドの担当者であるため、このフロントエンドへの進出は私にとって新しく魅力的なものでした。

そのため、プロジェクトを進めながらコードを注意深く分析した後、リクエスト変数の POST データが空になっていることがわかりました。データは $.ajax 呼び出しまで適切に送信されていましたが、サーバーには到達しませんでした。もう少し狩りをして、何か疑わしいものを発見し、何が起こっているのかを識別することができました.

ページの他の部分に Ajax を使用しており、ajax メソッドは複数回呼び出されるため、$.ajaxSetup へのすべてのメソッド呼び出しで設定したいくつかの設定を除外しました。これらの 1 つは、dataType が「text」に設定され、contentType が「application/json」に設定されたことです。signalR がグローバル ajax 設定を適切にオーバーライドしていないようです。これがバグなのか意図された動作なのかはわかりませんが、その場合はより適切に文書化する必要があります (もしそうである場合は、お気軽に私たちを馬鹿と呼んでください:))

于 2012-09-12T18:29:06.743 に答える
1

メソッドはRegisterSourceと呼ばれ、javascriptでregisterSourceの代わりにregisterSourcesを呼び出します。

于 2012-09-12T09:04:39.817 に答える