2009-06-09 25 views
0

WCF(http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24644)のための「Rest toolkit」のHttpClientクラスを使用して、作成したRest-serverを統合しています。WCFのHttpClientとの接続を強制的に終了する

"接続"ヘッダーに関係なく、サーバーは現在接続を常に閉じています(これは開発中ですので、今は問題ありません)。

HttpClientインスタンスに接続を常に閉じる(またはサーバーが閉じることを承認する)ようにするにはどうすればよいですか。私は "Connection:close"ヘッダーを追加しようとしましたが、例外として "接続"が許可されたヘッダーではありませんでした。私もDefaultHeaders.Connection.Close = trueを設定しようとしましたが、これは何の違いもないようです。私はまだPOSTが完了した後にnetstatとの接続を見ることができます。

URIは文字列です)

HttpClient client = new HttpClient(); 
client.DefaultHeaders.Connection = new Connection(); 
client.DefaultHeaders.Connection.Close = true; 
HttpContent content = HttpContent.Create(body); 
HttpResponseMessage res = client.Post(new Uri(uri), content); 

ここでの問題は、私たちがPOST、呼び出しがわずか数ブロックを行う次回ということです。これは、クライアントによって接続が維持されているため、これはサーバーによってサポートされていないためです。

答えて

0

完了したら回答を破棄してみましたか?

// do stuff 
res.Dispose(); 

または

using (HttpResponseMessage res = client.Post(new Uri(uri), content)) 
{ 
    // do stuff 
} 
+0

HttpClientのIDisposable.Dispose(bool)実装が空白です。 – Anders

5

私はHttpClientをコードのほとんどを書きました。

HttpClientに接続を閉じることを受け入れるようにHttpClientに指示する必要はありません。自動的に動作するはずです。サーバーはクライアントに「Connection:近くに」ヘッダ

利用response.Dispose() - 基になる接続は、あなたが

client.DefaultHeaders.Addを保留しているバイトを読み終わっまでバイトを送信/新しい接続を開始することができないかもしれません( "Connection"、 "close");動作するはずです - あなたが例外を取得する場合、あなたがワイヤー上に何が起こっているのか確認するためにresponse.Request.Headersを検査することができます

のCodePlexサイト上の問題を開いてください

あなたは(「新しいウリをスキップすることができますあなたのための右のコンストラクタ(新しいUri(x、UriKind.RelativeOrAbsolute))を呼び出します

デフォルトでは、タイムアウトはHttpWebRequestと同じです - あなたは、永久にブロッキングとタイムアウトを区別するために、client.TransportSettings.ReadWriteTimeout/client.TransportSettings.ConnectionTimeoutを介してそれらを無効にしたいかもしれません。

関連する問題