【发布时间】:2018-08-14 09:07:09
【问题描述】:
这是我的问题:我的 winform 会定期检查第三方网络服务以获取一些数据。
只要没有网络问题,一切正常......但是一旦我遇到一个(VPN 关闭,质量差等......),我的应用程序就无法联系网络服务(得到一个
“无法连接到远程服务器”
每次,后跟一个
SocketException:“连接尝试失败,因为已连接 当事人在一段时间后没有正确回应,或建立 连接失败,因为连接的主机没有响应”)。
我不得不重新启动我的应用程序以使其再次运行...
我猜这是关闭连接或其他什么的问题,但是......无论我尝试什么(WebRequest 或HttpWebRequest,关闭响应流......),结果都是一样的......
这是我当前的代码
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl);
request.Credentials = new NetworkCredential(strIdCredential, strPasswordCredential);
try
{
string strReturnValue = "";
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream data = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(data))
{
strReturnValue = sr.ReadToEnd();
}
response.GetResponseStream().Close();
}
}
return strReturnValue;
}
catch (WebException e)
{
using(var response = e.Response)
{
if (response != null)
response.GetResponseStream().Close();
}
return cstrNetworkError;
}
我做错了吗?它是来自网络服务的安全性吗?
【问题讨论】:
-
您是否尝试用
using(...)包裹request?像这样:using (var request = WebRequest.Create(strUrl) as HttpWebRequest) { ... } -
使用 cmd.exe >Netstat -a 确定客户端和服务器上的连接是否仍然打开。我不喜欢 using 语句,因为它自己处理异常。我宁愿有一个 try/catch 来捕捉异常。在异常句柄中,您可以添加应该解决问题的 Close() 方法。现在,当发生异常时,您不执行 Close()。
标签: c# httpwebrequest