これの底に到達しようとしています!
httpwebrequestsを使用してログインし、ページに移動して、そのページのhtmlを取得する非常に基本的なアプリがあります。次に、ループ内で5分ごとに3番目のページに別のWebリクエストを実行します。
すべて正常に動作し、シングルスレッド(およびかなり古い)ですが、状況が変化したため、このアプリの複数のインスタンスを密接に実行する必要があります(.batは、可能になるまで一時的な手段として2秒ごとにアプリを起動します新しいマルチスレッドソリューションをコーディングするため)。
アプリの最初のインスタンスがすべて正常に起動すると、最初のリクエストは約2秒で完了します。約3秒で2番目。
ただし、このアプリのインスタンスがますます多く同時に実行されると(> 100)、何か奇妙なことが起こり始めます。
最初のWebリクエストにはまだ2秒ほどかかりますが、2番目のリクエストはタイムアウトになるまで1分以上遅れます。なんでこんなのかわからないようです。2番目のページは最初のページよりも大きくなっていますが、ダウンロードに1分以上かかる通常のページとは異なります。
このサーバーのインターネット接続とハードウェアは、これらの要求を処理する能力を超えています。
CookieContainer myContainer = new CookieContainer();
// first request is https
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(https://mysite.com/urlone);
request.CookieContainer = myContainer;
request.Proxy = proxy;
Console.WriteLine(System.DateTime.Now.ToLongTimeString() + " " + "Starting login request");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
string tempString = null;
int count = 0;
do
{
// fill the buffer with data
count = resStream.Read(buf, 0, buf.Length);
// make sure we read some data
if (count != 0)
{
// translate from bytes to ASCII text
tempString = Encoding.ASCII.GetString(buf, 0, count);
// continue building the string
sb.Append(tempString);
}
}
while (count > 0); // any more data to read?
sb.Clear();
response.Close();
resStream.Close();
string output6;
Console.WriteLine(System.DateTime.Now.ToLongTimeString() + " " + "login request comeplete");
HttpWebRequest request6 = (HttpWebRequest)WebRequest.Create(@"http://mysite.com/page2");
request6.CookieContainer = myContainer;
response = (HttpWebResponse)request6.GetResponse();
resStream = response.GetResponseStream();
tempString = null;
count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);
sb.Append(tempString);
}
}
while (count > 0);
output6 = sb.ToString();
sb.Clear();
response.Close();
resStream.Close();
何か案は?私はhttpWebリクエストについてあまり進んでいないので、誰かがチェックできれば、上記のばかげたコードの間違いを犯していないことを感謝します。私がここに含める必要があるかもしれない他の情報について途方に暮れています、私が何かを逃したならば、私に教えてください、そして私は提供するために最善を尽くします。前もって感謝します。
編集1:
私はフィドラーを使用して問題の原因を突き止めました。問題は、アプリケーション(またはWindows)が何らかの理由でリクエストを送信しないことにあるようです。フィドラーによると、物理的なリクエストは実際には1秒未満かかります。