【发布时间】:2015-07-17 12:18:40
【问题描述】:
我有一个问题:
连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应 URL。
我也遇到类似的问题:
System.IO.IOException: 无法将数据写入传输连接:现有连接被远程主机强行关闭
和
System.Net.WebException: 操作在 System.Net.WebClient.UploadFile(Uri address, String method, String fileName) 处超时
我知道以前有人问过这个问题,但相信我,我几乎尝试了每一个解决方案。
奇怪的是这个问题根本不会出现在我的最后,只有当客户尝试使用它时才会出现。有时我的应用程序最终也能正常工作。
我想要完成的是我创建了一个桌面应用程序(Win Forms 和 C#)并尝试登录客户端,同时向我托管在 GODaddy 上的 php api 服务器发送请求。
var request = (HttpWebRequest)WebRequest.Create("url");
if (request != null)
{
#region System.Net.WebException
request.Method = "POST";
if (!string.IsNullOrEmpty(body))
{
var requestBody = Encoding.UTF8.GetBytes(body);
request.ContentLength = requestBody.Length;
request.ContentType = "application/json";
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(requestBody, 0, requestBody.Length);
}
}
else
{
request.ContentLength = 0;
}
request.Timeout = 15000;
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache);
string output = string.Empty;
try
{
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var stream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(1252)))
{
if (response.StatusCode == HttpStatusCode.OK)
{
while (!stream.EndOfStream)
{
output += stream.ReadLine();
}
output = stream.ReadToEnd();
}
}
}
}
catch
{
// Excaption Caught here
}
}
请帮帮我。
提前致谢。
【问题讨论】:
-
如果它总是在您的终端上运行,并且有时只在您的客户端运行,这可能是防火墙问题,但它是 http...您是否为 HttpWebRequests 使用了除 80 和 443 之外的其他端口?使用 ping 测试客户端和服务器之间的响应时间,以确保它们没有超时或丢包
-
我的 httpWebRequest 没有使用任何端口。此外,我无法从客户的机器上使用 ping,因为我没有访问权限。
-
这将很难解决。代码看起来不错,你说它确实对你有用,有时也对他们有用。我不知道怎么做,但您必须对网络连接进行故障排除,以确保不是问题所在。抱歉,我无法提供更多帮助。
-
@waltmagic,我知道这很难。我也发现很难调试。但是你说的 HttpWebRequest 端口呢?如果它有帮助,您可以看到在客户端发生任何问题时我得到的内部异常: System.Net.WebException:WebClient 请求期间发生异常。 ---> System.IO.IOException: Unable to write data to the transport connection: 一个现有的连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException: 远程主机在 System.Net.Sockets.Socket.Send(Byte[] buffer 处强行关闭了现有连接
-
默认端口是 80 和 443,大多数防火墙都允许这些端口,因为这些端口是为 http 保留的。如果您可能导致错误(访问您客户的网络),您可以调试并进入您的应用程序,直到代码断开连接,然后您就会知道发生了什么。
标签: c# asp.net-mvc web-services asp.net-web-api