HttpWebRequest の Timeoutを伸ばす
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());
}
}
}