作为本地系统运行时,WebClient无法下载文件

时间:2012-03-15 20:22:41

标签: c# .net web-services webclient webclient-download

我有一个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实例?如果是这样,是什么?

感谢任何提示或指示!

2 个答案:

答案 0 :(得分:1)

尝试使用NT AUTHORITY \ NETWORK SERVICE运行您的服务。如果这不起作用,请创建具有适当限制权限的用户帐户,并使用该帐户运行您的服务。

此外,如果您在Windows Server 2008 R2上运行,请在Technet上查看Managed Service Accounts主题。

答案 1 :(得分:0)

LocalSystem无权访问网络资源。使用NETWORK SERVICE帐户。

编辑: LocalSystem很可能没有您正在使用的文件系统路径的写权限。