HttpWebRequest の Timeoutを伸ばす

[English]

HttpWebRequestのデフォルトタイムアウトは100秒である。
そのため、HttpWebRequest.GetResponse() は、相手側サーバが100秒以上かかるとタイムアウトしてしまう。

タイムアウトを伸ばすには、

HttpWebRequest.Timeout に長い時間を指定するが、指定する場所に注意が必要。

もし、POSTを使ってリクエストを投げる場合、
GetRequestStream()を呼び出すよりも前に、Timeoutを指定する必要がある。

using System;
using System.Web;
using System.Net;
using System.Text;
using System.IO;

namespace ConsoleNetFramework
{
class Sample
{
static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(“http://localhost/slow”);

request.Method=”POST”;
byte[] postData = System.Text.Encoding.ASCII.GetBytes(“message=hello”);

 request.Timeout = 3*60*1000; // “GetRequestStream()”.よりも前でタイムアウトを設定す
Stream writeStream = request.GetRequestStream();
 request.Timeout = 3*60*1000; // “GetRequestStream()” よりも後で指定しても無効

writeStream.Write(postData, 0, postData.Length);

HttpWebResponse response;
// Get Response… ここでタイムアウトが発生する
 response = (HttpWebResponse)request.GetResponse(); 

Stream receiveStream = response.GetResponseStream();
StreamReader sr = new System.IO.StreamReader(receiveStream, System.Text.Encoding.GetEncoding(“utf-8”));
Console.WriteLine(sr.ReadToEnd());
}
}
}