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