我有一个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
} );
除此之外,连接是超时的,因为流是无限的,服务器应该读取前几个字节然后关闭流。
答案 0 :(得分:2)
最近,我们遇到了同样的问题。当您在IIS下托管服务时,无论您是否启用了流式传输,您的服务都会在发送之前缓冲整个邮件。原因是,当在服务上启用流式传输时,WCF似乎没有将Response.BufferOutput设置为“false”(默认为true)。解决方法可以在这里找到:
http://weblogs.asp.net/jclarknet/archive/2008/02/14/wcf-streaming-issue-under-iis.aspx
答案 1 :(得分:0)
您是否在客户端关闭Stream?如果为true,请尝试仅在服务端关闭。 另外,验证它是否是OneWay操作。 你可以为端点发布两个绑定节点吗?