2

私は次の2つの記事を読み、同じことを実装しようとしました。

私のコードはこれで、タイムアウトはここで発生します

HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.Method = "POST";
wr.KeepAlive = false;
wr.CookieContainer = cookieJar;

wr.Proxy = null;
wr.ServicePoint.ConnectionLeaseTimeout = 5000;
Stream rs = wr.GetRequestStream(); // -> Time out error occurs here

読んだ記事

My code using that as a sample
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ContentType = "multipart/form-data; boundary=" + boundary;
wr.Method = "POST";
wr.KeepAlive = false;
wr.CookieContainer = cookieJar;

wr.Timeout = 5000;
wr.Proxy = null;

wr.ServicePoint.ConnectionLeaseTimeout = 5000;
wr.ServicePoint.MaxIdleTime = 5000;

Stream rs = wr.GetRequestStream(); //-->Time out error

どんな手がかりも役に立ちます。時々、1 つのリクエストを取得して、他のすべてのリクエストが失敗するか、すべてが失敗することがあります。HTTPS サイトに投稿しています。Fiddler で実行しても問題ありません

更新 1: zbugs のアイデアに従ってみましたが、同じ問題が発生しました。最初のリクエストは通過し、後続のリクエストは失敗します。すべての応答ストリームを閉じているだけでなく、リクエスト オブジェクトで中止を呼び出しています。

4

3 に答える 3

4

これを設定する必要があります。

const int maxIdleTimeout = 5000;
ServicePointManager.MaxServicePointIdleTime = maxIdleTimeout;

いつでも複数のクライアントがリクエストを行っている場合、

const int maxConnections = 100; //or more/less
ServicePointManager.DefaultConnectionLimit = maxConnections;

http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.maxservicepointidletime.aspx

于 2012-05-18T20:38:42.583 に答える
1

を実装するすべてのリソースを解放する必要がありますIDisposable。それらを解放しないと、実験しているような問題が発生する可能性があります。

ここにあなたのコードとは違う例がありますが、私の言いたいことを理解するのに役立ちます

var request = WebRequest.Create(url);
request.ContentType = "application/json; charset=utf-8";

using (var response = request.GetResponse())
{
    using (var sr = new StreamReader(response.GetResponseStream()))
    {
    ...
    }
}
于 2012-05-18T20:45:12.130 に答える
0

リクエスト コールの 1 つで、コールに失敗しました

Request.Abort()

それはzbugsからの提案とともに私の問題を解決したようです

于 2012-05-21T15:16:56.047 に答える