我使用signalR与signalr-hub和Windows身份验证ASP.net Web Api项目。
我在项目中创建了两个hub,它们都订阅了stateChanged和errorHandler监听器。有时,页面加载没有问题,但有时会抛出403连接问题。错误消息如下:
Error: No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.
有时会出现错误消息:
Error: Error during start request. Stopping the connection.
responseText: "Unrecognized user identity. The user identity cannot change during an active SignalR connection."
我认为错误是由Windows身份验证的竞争条件引起的。当浏览器首次加载时,默认情况下连接是匿名的,然后signalR开始连接,然后Windows auth返回实际用户,然后SignalR注意到连接在请求中发生了变化并引发错误。
到目前为止,我一直在尝试使用$ timeout延迟与signalR的连接以等待Windows Auth,但这似乎只会产生更频繁的错误。
我将尽快提供有关此问题的更多信息,与此同时,我将非常感谢如何解决\绕过\调试此问题的任何一般性想法。
答案 0 :(得分:2)
解决方案是禁用匿名身份验证。否则,如果在处理信号器请求时SignalR正在连接并且身份验证从匿名转换为用户身份验证,则会引发错误。
可以在web.config中禁用匿名身份验证,如下所示:
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
...
我在这里找到了这个答案:answer