私はサーバーとして動作するマルチスレッドコンソールアプリケーションを持っています。マルチスレッドアプリケーションの4番目のHttpWebRequestの奇妙なタイムアウト
//code copied from http://www.switchonthecode.com/tutorials/csharp-tutorial-simple- threaded-tcp-server
//blocks until a client has connected to the server
TcpClient client = tcpListener.AcceptTcpClient();
//create a thread to handle communication with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
は、スレッドは、次のコードを使用してHttpWebRequestsの数を行います:サーバーは、新しいスレッドに新しいクライアントがTcpListenerに接続するたびに起動します
public static HttpWebResponse HttpGet(string pRequestURI, string pArgs)
{
string requestURI = string.Format("{0}?{1}", pRequestURI, pArgs);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURI);
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return response;
}
の問題は、私が得るということですFOURTH要求時にタイムアウトしてください。それは本当に奇妙で、私はそれを掛けることができません。このコードは、シングルスレッドアプリケーションのときにうまく機能しました。私はまた、使用して応答ストリームを閉じてください作っています:
response.Close();
requestURIが正しいことを、「私はコピーして自分のブラウザに貼り付ける試みた原因。実際には、4番目のリクエストが何であるかは問題ではありません(私は異なるリクエストを試しました)、私はいつもタイムアウトになります。
私はそれがスレッド制限に関連するかもしれないと思うが、私は本当にそれを解決する方法を知らない。どんな提案も大歓迎です。
ありがとうございます。
あなたはただ一つのクライアントしか持っていません。あるいは、問題は複数のクライアントでしか現れませんか? – arx
@arx現時点では、単一のクライアント、つまりASP.NET Webアプリケーションしかありません。最終的には、サーバーにはさらに多くのクライアントが存在しますが、現時点では1つしかありません。 – Rachel
スレッドの問題のようには聞こえません。あなたは2つしか持っていません:アイドル状態のメインスレッドが別の接続を待っていて、他のスレッドが干渉していないサービススレッドです。 Webリクエストを作成する間に何かしていますか?あなたは、次のリクエストを行う前に応答を閉じるか、それらを一緒に処理できるようにすべて開いたままにしていますか? – arx