我使用 SignalR 1.0.1 作为 ASP.NET MVC3 应用程序的聊天核心。使用 IIS 7.5
在 MVC 控制器中有两种方法提供对聊天视图的访问:
1. 第一种方法是公共的,允许匿名用户聊天 - 没有授权。2.对于域用户 - 聊天代理,
使用属性限制对第二种方法的访问。
Hub 中没有明确指定的授权。
对于这种情况,我在 IIS 上涉及 Windows 和匿名身份验证。
我还实现了自定义角色提供程序,它仅在内存中运行 - 不会将任何内容持久化到数据库中。[Authorize]
发生的情况是,在控制器方法中使用“[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 wrong format
据我了解,在调用我的Send
方法时,集线器正在处理的请求与Identity
用于连接集线器的请求不同,或者集线器GetConnectionId
发现,该用户实际上没有被授权 - 但是当没有授权时它如何检查该假设在集线器本身上指定?
有人可以对此有所了解吗?
提前致谢 :)