Raf*_*cci 0 c# delphi wcf delphi-2010
我需要创建一个具有下载文件功能的WCF服务.此WCF将由Delphi应用程序使用.
问题:将要下载的文件非常大,可能会导致Delphi端的内存问题.到目前为止,我有这个代码:
[OperationContract]
byte[] DownloadFile(string filePath);
Run Code Online (Sandbox Code Playgroud)
但是这段代码会导致客户端应用程序将所有数据保存在内存中,这可能是一个问题.
我已经读过WCF能够传输数据,您可以阅读:如何:启用流式传输
但我对从MSDN中删除的这段代码有疑问:
[OperationContract]
Stream GetStream(string data);
Run Code Online (Sandbox Code Playgroud)
在客户端,我想传递TFileStream给函数.通过使用TFileStream每个字节读取将直接进入磁盘.但函数RETURNS一个流和我想要的东西是不可能的,因为流不会是函数的参数.
如何将文件从WCF服务直接下载到磁盘?
我发现在与其他(非.NET)客户端合作时依赖于WCF中的"内置"流功能是奇怪问题的重要来源......
基本上我们通过定义来解决这种情况:
[OperationContract]
string DownloadFile(string filePath);
Run Code Online (Sandbox Code Playgroud)
该方法生成一个HTTP(S)url并返回它...
这样任何支持http的客户端都可以以健壮的方式处理数据......
请注意,这会使服务器变得更复杂,因为您现在需要一些机制来生成(并提供HTTP GET)URL(安全性,"全局"唯一,仅在有限时间内可用等).
但是最大的优势是,只要有可用的http支持(Delphi有一些非常好的http-client选项),那里的任何客户端(移动或一些奇怪的嵌入式设备或你可能会遇到的任何东西)都能够实现这个方案. .