2011-12-30 3 views
0

私はサーバーとして動作するマルチスレッドコンソールアプリケーションを持っています。マルチスレッドアプリケーションの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番目のリクエストが何であるかは問題ではありません(私は異なるリクエストを試しました)、私はいつもタイムアウトになります。

私はそれがスレッド制限に関連するかもしれないと思うが、私は本当にそれを解決する方法を知らない。どんな提案も大歓迎です。

ありがとうございます。

+0

あなたはただ一つのクライアントしか持っていません。あるいは、問題は複数のクライアントでしか現れませんか? – arx

+0

@arx現時点では、単一のクライアント、つまりASP.NET Webアプリケーションしかありません。最終的には、サーバーにはさらに多くのクライアントが存在しますが、現時点では1つしかありません。 – Rachel

+0

スレッドの問題のようには聞こえません。あなたは2つしか持っていません:アイドル状態のメインスレッドが別の接続を待っていて、他のスレッドが干渉していないサービススレッドです。 Webリクエストを作成する間に何かしていますか?あなたは、次のリクエストを行う前に応答を閉じるか、それらを一緒に処理できるようにすべて開いたままにしていますか? – arx

答えて

3

多くの血液、汗や涙の後、私はそれを解決することができました。

本当に愚かな間違いでしたが、私がであったこの1つの場所が判明しました

一部の(不明な)理由で、これはWebアプリケーションからの要求には影響しませんが、コンソールアプリケーションから要求を発行するときにタイムアウトの問題が発生します。

ご協力いただきありがとうございます。大変ありがとうございます。

+0

私にとっては、レスポンスを取得した後で、すべてのリクエストに対して 'request.ServicePoint.CloseConnectionGroup(request.ConnectionGroupName); 'を使用して接続グループ全体を閉じる必要がありました。 – SimpleVar

0

request.ServicePoint.CloseConnectionGroup(request.ConnectionGroupName); このコード行は私の問題を解決しました ありがとう

関連する問題