在问一个单独的问题之前,我已经做了大量的关于它的搜索,并在现有的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客户端我尝试用下面的代码来调用它:
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];
当应用程序启动用户没有登录且没有开放SignalR连接。用户通过在使用WebSecurity.Login
方法的服务器中调用登录服务来登录。如果登录服务返回成功,我将上面的呼叫转到SignalR Hub,然后我得到服务器错误500,描述为“ConnectionId的格式不正确”。
完整的服务器堆栈跟踪如下:
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)
我明白这是某种形式的身份验证和用户身份不匹配的,但到现在为止我还没有发现任何解决它的办法。所有其他问题都建议在用户身份更改时停止打开的连接,但正如我上面提到的,在用户成功登录之前,我没有打开连接。
任何帮助将不胜感激。 谢谢。
您是否找到了解决方案?我有同样的问题。 – tremolo
我得到这个错误约5次5。所以有时候,连接不会在服务器上产生connectionId错误,但大多数情况下它都会产生连接错误。虽然我没有任何身份验证过程。 – tremolo
@tremolo:对不起,尚未解决。 – ozzotto