IIS 7 で実行するように設定している wcf サービスがあります。サービスを転送モードのストリーミングに設定しています。コンソール アプリケーションでサービスを自己ホストすると、すべてが正常に機能するように見えます。しかし、クライアントが iis ホステッド サービスに接続すると、バッファリングしているように見え、クライアントは最終的にタイムアウトします。フィドラーを使用して、http 要求が行われる前にこのクライアントのタイムアウトが発生することを確認しました。
これがサーバーバインディングです。
var binding = new CustomBinding();
binding.Elements.Add( new TextMessageEncodingBindingElement()
{
MessageVersion = MessageVersion.Soap12WSAddressing10
} );
var secBinding = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
secBinding.AllowInsecureTransport = true;
binding.Elements.Add( secBinding );
binding.Elements.Add( new HttpTransportBindingElement()
{
TransferMode = TransferMode.Streamed,
MaxReceivedMessageSize = Int32.MaxValue,
} );
そしてクライアントバインディング:
var binding = new CustomBinding();
binding.Elements.Add( new TextMessageEncodingBindingElement()
{
MessageVersion = MessageVersion.Soap12WSAddressing10
} );
var secBinding = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
secBinding.AllowInsecureTransport = true;
binding.Elements.Add( secBinding );
binding.Elements.Add( new HttpTransportBindingElement()
{
TransferMode = TransferMode.Streamed,
MaxReceivedMessageSize = Int32.MaxValue,
MaxBufferSize = 400
} );
余談ですが、ストリームは無限であり、サーバーは最初の数バイトを読み取ってからストリームを閉じる必要があるため、接続がタイムアウトします。