C/C++教程

WCF 传输大文件内存溢出解决方法

本文主要是介绍WCF 传输大文件内存溢出解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

问题描述:

业务中案件卷宗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;
}

 

这篇关于WCF 传输大文件内存溢出解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!