4

我有一个设置为在 IIS 7 下运行的 wcf 服务。我将服务设置为传输模式的流式传输。当我在控制台应用程序中自行托管服务时,一切似乎都正常。但是当客户端连接到 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
            } );

顺便说一句,连接超时,因为流是无限的,服务器应该读取前几个字节,然后关闭流。

4

2 回答 2

2

最近,我们遇到了同样的问题。当您在 IIS 下托管服务时,无论是否启用流式传输,您的服务都会在发送之前缓冲整个消息。这样做的原因是,当在服务上启用流式传输时,WCF 似乎没有将 Response.BufferOutput 设置为“false”(默认为 true)。可以在此处找到解决方法:

http://weblogs.asp.net/jclarknet/archive/2008/02/14/wcf-streaming-issue-under-iis.aspx

于 2011-02-16T21:33:56.370 回答
0

您是否正在关闭客户端中的流?如果为真,请尝试仅在服务端关闭。此外,验证它是否为 OneWay 操作。您可以为端点发布两个绑定节点吗?

于 2010-04-08T18:40:30.913 回答