我编写了一个c#程序,它成功连接到有和没有代理的远程主机。我们在两个不同的网络中工作,家庭和办公室网络,使用代理。这是代码片段。
while(true) {
Thread.sleep(5000);
using (var client = new WebClient()) {
client.Headers[HttpRequestHeader.Accept] = "application/json";
client.Headers[HttpRequestHeader.ContentType] = "application/json";
string result = client.UploadString(Event.GetInsertURL(), "POST", json);
if (result.Contains("SUCCESS")) {
// Console.WriteLine("SUCCESS");
}
}
}
上面的代码在一个循环中运行,以便继续向同一个api发出请求。如果程序在这些网络中启动,它在两个网络中都有效。但是,如果我在家中启动程序并休眠或睡眠计算机并在办公室重新启动它,我会收到以下异常。
System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 74.125.130.141:443
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
原因是第一次建立的连接在后续请求中重用。当我得到这个例外时,有什么方法可以强制创建连接吗?
P.S:
Event of Event.GetInsertURL()
public static string GetInsertURL(){
return "https://my-app.appspot.com/_ah/api/"eventendpoint/v1/insertEvents";
}
答案 0 :(得分:0)
代码已经为new WebClient()
中的每个连接创建了一个新的客户端会话。
可能是睡眠发生在其中一个会话过程中,然后触发故障。
通常,任何网络方法都可能在意外情况下发生。唯一真正的解决方案是将代码包装在try / catch块中,并在报告永久性故障之前在正确的条件下重试几次。
答案 1 :(得分:0)
基于经验而非知识:
使用HttpWebRequest而不是webClient,它更加健壮
我的例子太乱了,但那是基础:
var httpWebRequest =(HttpWebRequest)System.Net.WebRequest.Create(URI);