我有一个Windows服务作为默认本地系统(在Windows Server 2008 R2上)运行,尝试从用户提供的URL下拉PDF。如果该URL位于本地Intranet中,则会有一个愉快的结局。如果URL指向更远的URL(例如来自irs.gov),我会得到一个例外:
System.Net.WebException:无法连接到远程服务器---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败...
如果我将“登录身份”帐户从本地系统更改为我的帐户(例如),则请求会通过。但我不愿意以真正的用户身份运行Windows服务(我太保守了吗?)。
我正在使用的代码看起来非常简单:
string destinationFileName = ...;
Uri uri = ...;
using (var wc = new WebClient()) {
wc.DownloadFile(uri.AbsoluteUri, destinationFileName );
}
我是否需要获取某种IE设置并将其添加到WebClient实例?如果是这样,是什么?
感谢任何提示或指示!
答案 0 :(得分:1)
尝试使用NT AUTHORITY \ NETWORK SERVICE运行您的服务。如果这不起作用,请创建具有适当限制权限的用户帐户,并使用该帐户运行您的服务。
此外,如果您在Windows Server 2008 R2上运行,请在Technet上查看Managed Service Accounts主题。
答案 1 :(得分:0)
LocalSystem无权访问网络资源。使用 NETWORK SERVICE
帐户。
编辑: LocalSystem很可能没有您正在使用的文件系统路径的写权限。