WCF服务:MaxReceivedMessageSize(async)

时间:2013-07-25 09:51:07

标签: c# web-services serialization streaming

我遇到了异常,因为我从WCF服务器传输到客户端的数据的消息大小和/或数组长度超过了最大大小。此主题经常发生,但大多数解决方案都是关于更改服务绑定的MaxReceivedMessageSize。

    var binding = new WSHttpBinding { MaxReceivedMessageSize = int.MaxValue };
    binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
    host.AddServiceEndpoint(typeof(IEditor), binding, uri);

但我很感兴趣如何以不同的方式解决这个问题。考虑以下方法。它可能会导致大字节数组。我也尝试将图像转换为Base64String。

[ServiceContract]
public interface IEditor
{
    [OperationContract]
    byte[] GetImage();
}

是否有一种常见模式可以使用 BeginRead / EndRead 将较小块的字节数组流式传输到客户端?你会如何在代码中做到这一点?

1 个答案:

答案 0 :(得分:1)

根据微软的说法(见this link),合同必须进行调整,终端配置也是如此。

<system.serviceModel>
     …
    <bindings>
      <basicHttpBinding>
        <binding name="ExampleBinding" transferMode="Streaming"/>
      </basicHttpBinding>
    </bindings>
     …
<system.serviceModel>

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface IStreamedService
{
    [OperationContract]
    Stream Echo(Stream data);
    [OperationContract]
    Stream RequestInfo(string query);
    [OperationContract(OneWay=true)]
    void ProvideInfo(Stream data);
}