SignalR服务器错误"ConnectionId的格式不正确." 使用SignalR-ObjC库

ozz*_*tto 5 asp.net xcode objective-c signalr visual-studio-2012

在问一个单独的问题之前,我已经做了很多关于它的谷歌搜索并在已经存在的stackoverflow 问题中添加了注释.

我在我的服务器中有一个SignalR Hub(试过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();
            }
    }
Run Code Online (Sandbox Code Playgroud)

如果我删除Authorize属性,问题仍然存在.

在我的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];
Run Code Online (Sandbox Code Playgroud)

当应用程序启动时,用户未登录,并且没有打开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)
Run Code Online (Sandbox Code Playgroud)

我知道这是某种身份验证和用户身份不匹配,但到目前为止我还没有办法解决它.所有其他问题建议在用户身份更改时停止打开的连接,但正如我上面提到的,在用户成功登录之前我没有打开连接.

任何帮助将非常感激.谢谢.

小智 1

我们也有类似的问题。关闭连接令牌的加密功能修复了它。

抱歉,我无法提供进一步的帮助,因为我正在 iOS 端工作,而不是 .net 端。