【发布时间】:2011-09-01 13:17:15
【问题描述】:
我们有一个简单的控制台应用程序,用 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() 出现错误
【问题讨论】:
-
你在 127.0.0.1:80 听什么?
-
这是一个 Web 服务器,因此 IIS 将监听端口 80。
标签: c# .net httpwebrequest scheduled-tasks