2011-09-01 76 views
1

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

当此控制台的触发时间运行失败,但下列情况除外:

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出现的错误()
+0

你在127.0.0.1:80上收听什么? –

+0

这是一个Web服务器,因此IIS将在端口80上侦听。 – Mmerrell

回答

2

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

原来发生的事情是最终成为一个计划任务,在同一时间强制执行IIS重置时运行。那么IIS重置会打,而当它试图开始备份这个过程将尝试上传文件。上传当然会失败并出现上述错误消息,因为IIS服务启动时,端口80上没有任何监听。

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

+0

+1来记录解决方案,即使这是一个老问题 – Gorgen

0

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

+0

我遇到过很多类似你描述的情况,我发现Skype占用80端口并导致'HttpRequest'失败。 –

+0

Skype未安装在本机上。 – Mmerrell

+0

我建议使用网络嗅探器,这样您就可以知道哪个进程/线程使用端口80 –

0

我正在与Web客户端类似的错误:

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

我有我的ScheduledTask“跑用户是否登录或不”,而与代码失败(2) 。

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

相关问题