C# 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败

C# 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,c#,asp.net-mvc,web-services,asp.net-web-api,C#,Asp.net Mvc,Web Services,Asp.net Web Api,我有一个问题: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应URL 我也会遇到这样的问题: System.IO.IOException:无法将数据写入传输连接:远程主机强制关闭了现有连接 及 System.Net.WebException:操作在System.Net.WebClient.UploadFile(Uri地址、字符串方法、字符串文件名)处超时 我知道以前有人问过这个问题,但相信我,在我的任期内,我几乎尝试了每一项决议 奇怪的是,这个问题根

我有一个问题:

连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应URL

我也会遇到这样的问题:

System.IO.IOException:无法将数据写入传输连接:远程主机强制关闭了现有连接

System.Net.WebException:操作在System.Net.WebClient.UploadFile(Uri地址、字符串方法、字符串文件名)处超时

我知道以前有人问过这个问题,但相信我,在我的任期内,我几乎尝试了每一项决议

奇怪的是,这个问题根本没有出现在我这一方,只有当客户尝试使用它时才出现,而这并不是固定不变的。有时,我的应用程序在它们的末尾也可以正常工作

我试图完成的是我创建了一个桌面应用程序(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
    }
}
请帮帮我

提前感谢。

尝试添加此

request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.ServicePoint.ConnectionLimit = 12;

MSDN文章建议每个CPU连接12个,因此限制为12个,因为它由GoDaddy托管,所以我确信服务器资源是有限的。

我想我得到了答案。我想把它贴出来,这样可以帮助其他人


这很可能是特定的机器问题或服务器问题,但在我的例子中,我尝试设置Request.proxy=null,它就像一个符咒一样工作。

如果它总是在您的端工作,并且只是有时在您的客户端工作,那么它可能是防火墙问题,但它是http…您是否为HttpWebRequests使用了不同于80和443的端口?使用ping测试客户端和服务器之间的响应时间,以确保它们没有超时或丢弃数据包。我的httpWebRequest不使用任何端口。另外,我不能从我客户的机器上使用ping,因为我没有访问权限。这将使故障排除变得困难。代码看起来不错,你说它对你有用,有时对他们也有用。我不知道怎么做,但您必须对网络连接进行故障排除,以确保这不是问题所在。“对不起,我帮不了你了。”沃尔特·马奇,我知道这很难。我还发现调试非常困难。但是您所说的HttpWebRequest端口呢?如果它有帮助,您可以看到我在客户端发生任何问题时得到的内部异常:System.Net.WebException:在WebClient请求期间发生异常。-->System.IO.IOException:无法将数据写入传输连接:远程主机强制关闭了现有连接。-->System.Net.Sockets.SocketException:远程主机在System.Net.Sockets.Socket.Send(字节[]缓冲区)强制关闭了现有连接。默认端口为80和443,大多数防火墙都允许这些端口,因为这些端口是为http保留的。如果可能导致错误(访问客户端网络)你可以调试并进入你的应用程序,直到代码断开连接,然后你就会知道发生了什么。谢谢,但我已经尝试过@waltmagic。但是问题是否可能发生在服务器端,就像我的案例一样:GoDaddy?我如何才能找出它的服务器端或代码问题?我真的认为它在服务器端…我认为正在建立连接,然后出现问题。当连接关闭或断开时,您可以编辑api以记录日志,这肯定会有帮助。您可以调试并进入程序以查找桌面应用程序中的问题。非常感谢@waltmagic。我将提供上述解决方案,并让您知道。您在哪里添加的?