在计划任务计划上运行时,控制台应用程序中的Web请求失败

时间:2011-09-01 13:17:15

标签: c# .net httpwebrequest scheduled-tasks

我们有一个简单的控制台应用程序,用C#.NET 4.0编写,目前在计划任务上运行。这个控制台应用程序只是直接从磁盘上获取文件,然后将它们上传到托管在同一台机器上的ASP.NET网站。

当此控制台在其触发时间运行时,它将失败并出现以下异常:

Message: Unable to connect to the remote server
Stack Trace:    at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at Program.Main(String[] args) in Program.cs:line 69
Inner Exception: System.Net.Sockets.SocketException (0x80004005): No connection could be made because the target machine actively refused it 127.0.0.1:80
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)

但是,当我们手动运行应用程序时,它运行得非常好,当我们进入计划任务并手动运行任务时,它将执行而不会出错。

我们当前为其尝试连接的域配置了主机文件,指向可以在异常中看到的环回IP。这是由于防火墙配置不允许内部连接到外部IP而实现的。

有关计划任务的其他信息:

  • 设置为在管理员凭据下运行并具有最高权限。
  • 每天只运行一次
  • 执行其他操作没有问题(移动和重命名 文件)
  • HttpWebRequest.GetRequestStream()
  • 发生错误

3 个答案:

答案 0 :(得分:2)

最终这是一个非常奇怪的情况,解决一个不同的问题最终解决了这个问题。

结果发生的事情是,最终成为一个计划任务,正在强制执行IIS重置的同一时间运行。那么IIS重置就会命中,当它尝试重启时,这个过程会尝试上传一个文件。上传当然会因上述错误消息而失败,因为在IIS服务启动时,最终没有在端口80上侦听任何内容。

正在运行的计划任务是针对释放IIS将使用的资源的其他问题的旧修复。它是在不同的用户之下,因此需要进一步挖掘才能找到。一旦它被禁用,每日过程就会毫无问题地运行。

答案 1 :(得分:0)

您需要检查谁在使用端口80.检查Skype是否正在运行?

答案 2 :(得分:0)

我在WebClient上遇到了类似的错误:

  

无法连接到远程serverSystem.Net.Sockets.SocketException(0x80004005):连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应123.456 .789.000:80

我让我的ScheduledTask“运行是否用户登录”并且使用Code(2)失败了。

我将其更改为“仅在用户登录时运行”并解决了该问题。