如何使用angular-signalr-hub和windows authenitification调试零星的403连接问题

时间:2015-07-22 09:54:08

标签: angularjs signalr windows-authentication

我使用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,但这似乎只会产生更频繁的错误。

我将尽快提供有关此问题的更多信息,与此同时,我将非常感谢如何解决\绕过\调试此问题的任何一般性想法。

1 个答案:

答案 0 :(得分:2)

解决方案是禁用匿名身份验证。否则,如果在处理信号器请求时SignalR正在连接并且身份验证从匿名转换为用户身份验证,则会引发错误。

可以在web.config中禁用匿名身份验证,如下所示:

 <system.web>
    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>
    ...

我在这里找到了这个答案:answer