0

我遇到了一个异常,因为我从 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将字节数组以较小的块流式传输到客户端的常见模式?你会如何在代码中做到这一点?

4

1 回答 1

1

根据 Microsoft(请参阅此链接),必须调整合同和端点配置。

<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);
}
于 2013-12-16T17:08:32.870 回答