使用SignalR Owin Host 2.0.3获得401错误

时间:2014-04-30 23:27:57

标签: signalr signalr.client

我正在尝试设置负载测试,尽可能多地运行代码库。我在同一个过程中运行服务器和客户端:

class Program 
{
    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR(new HubConfiguration
            {
                EnableDetailedErrors = true
            });
        }
    }
    public static void Main(string[] args)
    {
        var signalr = "http://localhost:21337/";

        using (WebApp.Start<Startup>(signalr))
        {
            var connection = new HubConnection(signalr) {Credentials = CredentialCache.DefaultNetworkCredentials};

            var catalog = connection.CreateHubProxy("CatalogHub");

            connection.Start().Wait();

            catalog.Invoke("SendChat", String.Empty, String.Empty, String.Empty);

            Console.ReadLine();
        }
    }
}

然而,在connection.Start.Wait()我收到401 Unauthorized错误。我不确定为什么因为IIS无处可去。

2 个答案:

答案 0 :(得分:4)

PEBKAC。结果是集线器上设置了[Authorize],但我使用的是匿名身份验证。确保Ntlm身份验证解决了问题。

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            var listener = (HttpListener)app.Properties[typeof(HttpListener).FullName];
            listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;
            app.MapSignalR(new HubConfiguration
            {
                EnableDetailedErrors = true,
                EnableJSONP = true
            });
        }
    }

答案 1 :(得分:0)

在我的集线器类上设置Authorize属性后,我发现在我的Web API项目的属性中禁用了Windows身份验证,我收到了同样的错误。 getting 401 error with signalr owin host 2.0.3指出了这一点。当我启用它时,这非常有效,我也能够在我的集线器中获取用户身份名称

需要注意的一点是,我没有像上面的帖子

中那样设置身份验证方案