私は現在、Webサーバーへの一連のリクエストを実行するシンプルなアプリを書いていますが、奇妙な...機能に遭遇しましたか?
リクエストのレスポンスストリームは必要ありませんが、ステータスコードのみが必要です。したがって、データの各部分について、独自の「送信」メソッドを呼び出します。
public static int Send(string uri)
{
HttpWebRequest request = null;
HttpWebResponse response = null;
try
{
request = (HttpWebRequest)WebRequest.Create(uri);
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK) return 0;
}
catch (Exception e)
{
if (request != null) request.Abort();
}
return -1;
}
正常に動作します?はい、この関数を少なくとも2回呼び出さない限り。そのような関数を(同じuriで)続けて2回呼び出すと、常にタイムアウトになります。
さて、それは奇妙です。request.Abort();
ゼロを返すときに追加すると(ここでは、ステータスコードが200の場合)、すべてが常に正常に機能します。
だから私の質問は-なぜですか?それはある種のフレームワーク制限ですか、それとも特定のサーバーに対するある種のアンチDOS保護ですか(残念ながら、サーバーは私にとってブラックボックスです)?または多分私はそれがすべてどのように機能するかについてsmthを理解していませんか?