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

时间:2010-04-08 15:54:49

标签: wcf wcf-streaming

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

除此之外,连接是超时的,因为流是无限的,服务器应该读取前几个字节然后关闭流。

2 个答案:

答案 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操作。 你可以为端点发布两个绑定节点吗?