问题描述:
业务中案件卷宗PDF文件过大(>500M)从WCF端传输到MVC客户端 导致内存溢出。
解决方案:
参考WCF官方文档 如何:启用流处理 - WCF | Microsoft Docs
启动大文件流传输模式 配置绑定 BasicHttpBinding的属性
MessageEncoding = WSMessageEncoding.Mtom;
TransferMode = TransferMode.Streamed;
Wcf端代码
public Stream Send(string ajid, string jzfl)
{
Stream res = new MemoryStream('你的byte数组');
res.Seek(0, SeekOrigin.Begin);
return res;
}
客户端代码
使用stream copyto接收就不会导致内存溢出
public static byte[] GetDocContent_File_stream(string ajid, string jzfl)
{
byte[] bytes = null;
Stream stream = new MemoryStream();
var client = WcfProxy<ISendStreamService>.Get("SendStreamServiceV2");
client.Using(channel => stream = channel.GetDocContent_File(ajid, jzfl));
using (MemoryStream res = new MemoryStream())
{
stream.CopyTo(res);
bytes = res.ToArray();
}
return bytes;
}