web-dev-qa-db-ja.com

接続されたパーティが一定時間後に適切に応答しなかった、または確立された接続が失敗したため、接続試行は失敗しました

問題があります:

接続された側が一定時間後に適切に応答しなかったために接続試行が失敗したか、接続されたホストがURLに応答できなかったために確立された接続が失敗しました。

また、次のような問題が発生します:

System.IO.IOException:トランスポート接続にデータを書き込めません:既存の接続がリモートホストによって強制的に閉じられました

そして

System.Net.WebException:操作がSystem.Net.WebClient.UploadFile(Uriアドレス、Stringメソッド、String fileName)でタイムアウトしました

私はこの質問が以前に尋ねたことを知っていますが、私が私の最後でほぼすべての解決策を試したことを信じています。

奇妙なことに、この問題は私の最後にはまったく表示されず、クライアントが一定ではないものを使用しようとしたときにのみ表示されます。私のアプリケーションが最後にもうまく機能することがあります。

私が達成しようとしていることは、デスクトップアプリケーション(Winフォームと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
    }
}

私を助けてください。

前もって感謝します。

11
Manish

私は答えを得たと思います。それを投稿して他の人を助けることができると思った。

それはおそらく特定のマシンの問題またはサーバーの問題ですが、私の場合、Request.proxy = nullを設定しようとしましたが、それは魅力のように機能しました。

1
Manish

これを追加してみてください...

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

MSDNの記事では、CPUあたり12接続を推奨しています。GoDaddyによってホストされるため、12の制限があるため、サーバーリソースが制限されていると確信しています。

1
waltmagic