我有一个wcf服务,我设置在IIS 7下运行.我将服务设置为传输模式的流.
当我在控制台应用程序中自我托管服务时,每件事似乎都可以正常工作.但是当客户端连接到iis托管服务时,它似乎正在缓冲,并且客户端最终会超时.我已经使用fiddler来确定这个客户端超时发生在甚至发出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
} );
另外,连接是超时的,因为流是无限的,服务器应该读取前几个字节,然后关闭流.
最佳答案 最近,我们遇到了同样的问题.当您在IIS下托管服务时,无论您是否启用了流式传输,您的服务都会在发送之前缓冲整个邮件.原因是,当在服务上启用流式传输时,WCF似乎没有将Response.BufferOutput设置为“false”(默认为true).可在此处找到解决方法:
http://weblogs.asp.net/jclarknet/archive/2008/02/14/wcf-streaming-issue-under-iis.aspx