【发布时间】:2013-03-19 13:57:10
【问题描述】:
我使用 SignalR 1.0.1 作为 ASP.NET MVC3 应用程序的聊天核心。使用 IIS 7.5
MVC 控制器中有两种方法提供对聊天视图的访问:
1.第一种方法是公开的,允许匿名用户聊天-没有授权。
2. 对于域用户 - 聊天代理,使用 [Authorize] 属性限制对第二种方法的访问。
Hub 中没有明确指定的授权。
对于这种情况,我在 IIS 上同时涉及 Windows 和匿名身份验证。
我还实现了自定义角色提供程序,它仅在内存中运行 - 不会将任何内容持久化到数据库中。
发生的情况是,在控制器方法中使用“[Authorize]”属性会导致 Hub 响应 500,无论是来自授权视图的调用还是匿名视图:
请求(send是发送消息的Hub方法):http://localhost:8101/signalr/send?transport=serverSentEvents&connectionToken=VIXEZzWQSn5SNlA8RUy4iaOPDFdvuPBjMvFBiG2FLfvfxF347XHwtapsEV5ndU4OEI0Xb64W2ZRXTqwBiL2CXg2_JlTaTJ2RnVOj4bjvx6tQaYhAqTaXs9k2853GYqzd0
回复:The connection id is in the incorrect format.
Server stack trace:
at Microsoft.AspNet.SignalR.PersistentConnection.GetConnectionId(HostContext context, String connectionToken)
at Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequest(HostContext context)
at Microsoft.AspNet.SignalR.Owin.CallHandler.Invoke(IDictionary2 environment)
at Microsoft.AspNet.SignalR.Owin.Handlers.HubDispatcherHandler.Invoke(IDictionary2 environment)
at Microsoft.Owin.Host.SystemWeb.OwinCallContext.Execute()
at Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object extraData)<br/><br/>
但请注意,连接到 Hub 工作正常,返回 200 OK:http://localhost:8101/signalr/connect?transport=serverSentEvents&connectionToken=dYOwFxa1mkgdpzw-jitRpWq9oxRlrTet8U_dAzWjFQEdGNJfVXeG7Op0NZZwvznxeNdJCuPT75CKzQqI9HRPThV3uEDt-Z2qtIl9E02gF481&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&tid=9
我在 stackoverflow 上发现了类似的线程:
signalr The connection id is in the incorrect format
据我了解,在调用我的Send 方法时,集线器正在处理Identity 的请求,这与用于连接集线器的请求不同,或者集线器的GetConnectionId 发现,该用户实际上未被授权 - 但它是如何检查该假设,当集线器本身没有指定授权时?
有人可以解释一下吗?
提前致谢:)
【问题讨论】:
标签: asp.net-mvc authentication connection signalr