別の質問をする前に、私はそれについて多くのグーグルで行い、既に存在するstackoverflow questionにコメントを追加しました。SignalR Serverエラー "ConnectionIdの形式が正しくありません。" SignalR-ObjCライブラリ
私は以下のコードで私のサーバーにSignalRハブ(両方Vを試してみました1.1.3と2.0.0-RCを。)持っている:私は承認属性を削除した場合、問題が解決しない
[HubName("TestHub")]
public class TestHub : Hub
{
[Authorize]
public void TestMethod(string test)
{
//some stuff here
Clients.Caller.NotifyOnTestCompleted();
}
}
。
そして、私のiOSクライアントに私は以下のコードでそれを呼び出すようにしてみてください:アプリはユーザーがログインしていない起動し、何もオープンSignalRの連絡がない場合
SRHubConnection *hubConnection = [SRHubConnection connectionWithURL:_baseURL];
SRHubProxy *hubProxy = [hubConnection createHubProxy:@"TestHub"];
[hubProxy on:@"NotifyOnTestCompleted" perform:self selector:@selector(stopConnection)];
hubConnection.started = ^{
[hubProxy invoke:@"TestMethod" withArgs:@[@"test"]];
};
//received, error handling
[hubConnection start];
。ユーザーは、WebSecurity.Login
メソッドを使用するサーバーでログインサービスを呼び出してログインします。ログインサービスが成功を返す場合、私は上記のSignalR Hubを呼び出し、「ConnectionIdが間違った形式です」という説明でサーバーエラー500を取得します。
完全なサーバースタックトレースは以下の通りです:
Exception information:
Exception type: InvalidOperationException
Exception message: The ConnectionId is in the incorrect format.
at Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId(HostContext context, String connectionToken)
at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext context)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ProcessRequest(HostContext context)
at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(IDictionary`2 environment)
at Microsoft.Owin.Mapping.MapMiddleware.<Invoke>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar)
at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Request information:
Request URL: http://myserverip/signalr/signalr/connect?transport=webSockets&connectionToken=axJs EQMZxpmUopL36owSUkdhNs85E0fyB2XvV5R5znZfXYI/CiPbTRQ3kASc3 mq60cLkZU7coYo1P fbC0U1LR2rI6WIvCNIMOmv/mHut/Unt9mX3XFkQb053DmWgCan5zHA==&connectionData=[{"Name":"testhub"}]
Request path: /signalr/signalr/connect
User host address:
User:
Is authenticated: False
Authentication Type:
Thread account name: IIS APPPOOL\DefaultAppPool
Thread information:
Thread ID: 14
Thread account name: IIS APPPOOL\DefaultAppPool
Is impersonating: True
Stack trace: at Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId(HostContext context, String connectionToken)
at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext context)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ProcessRequest(HostContext context)
at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(IDictionary`2 environment)
at Microsoft.Owin.Mapping.MapMiddleware.<Invoke>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar)
at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
私は、これは、認証とユーザー識別情報不一致のいくつかの種類であることを理解が、今まで私はそれを解決する手立ては認められません。他のすべての質問は、ユーザーIDが変更されたときに開かれた接続を停止することを示唆していますが、上記のとおり、ユーザーが正常にログインする前に開いている接続はありません。
ご協力いただければ幸いです。 ありがとうございます。
この問題に対する解決策をお探しですか?私は同じ問題を抱えています。 – tremolo
このエラーは5回のうち4回発生しています。時には、接続がサーバー上でconnectionIdエラーを生成しない場合がありますが、ほとんどの場合、そうなります。私はその場で認証プロセスを持っていません。 – tremolo
@tremolo:申し訳ありませんが、解決策はまだありません。 – ozzotto