Trước khi hỏi một câu hỏi riêng biệt, tôi đã thực hiện rất nhiều googling về nó và thêm một bình luận trong stackoverflow đã tồn tại question.Lỗi máy chủ SignalR "ConnectionId có định dạng không đúng." với Thư viện SignalR-ObjC
Tôi có một SignalR Hub (thử cả v 1.1.3 và 2.0.0-rc.) Trong máy chủ của tôi với mã dưới đây:
[HubName("TestHub")]
public class TestHub : Hub
{
[Authorize]
public void TestMethod(string test)
{
//some stuff here
Clients.Caller.NotifyOnTestCompleted();
}
}
Vấn đề vẫn tồn tại nếu tôi loại bỏ các thuộc tính Authorize.
Và trong ứng dụng iOS của tôi, tôi cố gắng gọi nó với mã bên dưới:
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];
Khi ứng dụng bắt đầu người dùng không đăng nhập và không có kết nối SignalR mở. Người dùng đăng nhập bằng cách gọi dịch vụ Đăng nhập trong máy chủ sử dụng phương thức WebSecurity.Login
. Nếu dịch vụ đăng nhập trả về thành công thì tôi thực hiện cuộc gọi ở trên đến SignalR Hub và tôi gặp lỗi máy chủ 500 với mô tả "ConnectionId có định dạng không chính xác".
Máy chủ đầy đủ stacktrace như sau:
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)
Tôi hiểu đây là một số loại xác thực và nhận dạng người dùng mismatching nhưng đến nay tôi đã tìm thấy không có cách nào giải quyết nó. Tất cả các câu hỏi khác đề nghị dừng kết nối đã mở khi nhận dạng người dùng thay đổi nhưng như tôi đã đề cập ở trên, tôi không có kết nối mở trước khi người dùng đăng nhập thành công.
Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn bạn.
Bạn đã tìm thấy giải pháp cho điều này chưa? Im có cùng một vấn đề. – tremolo
Tôi nhận được lỗi này khoảng 4 trong số 5 lần.Vì vậy, đôi khi, kết nối không tạo ra lỗi connectionId trên máy chủ, nhưng hầu hết thời gian, nó. Tuy nhiên, tôi không có bất kỳ quá trình xác thực nào. – tremolo
@tremolo: Rất tiếc, chưa có giải pháp nào. – ozzotto