上传流式传输到WCF IIS 7托管服务无法正常工作

我有一个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

点赞