SignalR客户端 - 远程服务器返回错误 (401未经授权)

4

前提条件

我正在尝试让一个Windows服务充当SignalR客户端连接到Web服务器(在IIS Express上运行的MVC3项目)。 但是在尝试连接到服务器时,返回了401未经授权的状态。

据我所知,Windows服务运行在NETWORK_SERVICE帐户下,这个帐户不是用于连接到IIS的有效用户名。 不过,我已经尝试以以下方式配置SignalR:

初始化

private static Connection WebUIConnection = new Connection("http://localhost:54193/IISWebsite");

设置凭证

WebUIConnection.Credentials = new System.Net.NetworkCredential("?", "?")

IIS的设置:

IIS几乎是一个标准的MVC3项目,并启用了Windows身份验证。

我的尝试

我已经尝试将SignalR的凭据设置为本地Windows用户名+密码,还尝试使用本地网络AD用户名+密码,但我认为这不是正确的方法。

所以我的问题是,当我尝试使我的Windows服务作为SignalR服务器的客户端时,应该考虑什么?是否有一种方法可以配置IIS以授予客户端访问Network_Service用户的权限?实际上是否可能像我正在尝试做的那样,使Windows服务作为运行在IIS中的Web服务器的客户端?

谢谢, Lari

2个回答

2
我能够解决似乎是问题的事情。使用SignalR.Client时,您需要在连接字符串中提供的URL应该像这样:
private static Connection WebUIConnection = new Connection("http://localhost:54193/IISWebsite/signalr/hubs");

除此之外,我还需要提供我的本地管理员用户名和密码才能连接。我觉得这不是正确的做法,如果有人能告诉我如何让网络用户从本地计算机访问IIS,我将不胜感激。
然而,我认为在生产环境中创建一个单独的管理员帐户,并使我的Windows服务在该帐户下运行,是我愿意接受的解决方案。这样,它就可以毫无问题地连接到本地IIS。
希望这些信息对其他人有所帮助 :)
Lari

此外,如果您在使用Nuget获取的SignalR.Client时遇到问题。SignalR.Client版本实际上使用的是Newtonsoft.Json 4.0.3版本,而不是Nuget下载的4.0.5版本。要解决此问题,请在Nuget控制台中键入以下命令:Uninstall-Package Newtonsoft.Json -Force Install-Package Newtonsoft.Json -Version 4.0.3 - Lari Tuomisto
3
这里提出的解决方案(https://dev59.com/iWkw5IYBdhLWcg3wrshS)对我很有用。它使用默认的网络凭据。 - Jedidja

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接