我正在开发一个必须能够接收潜在大文件(最多2~3GB)的网络服务。
目前我配置了一个在Glassfish中运行的非常简单的测试Web服务:
package ch.geste.MTOMTest;
import javax.activation.DataHandler;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.soap.MTOM;
@MTOM
@WebService(name="ServiceMTOM_Svc")
public class ServiceMTOM {
public int upload(@WebParam(name="filename") String filename, @WebParam(name="data") DataHandler data)
{
return 0;
}
}
在客户端(C#)我导入了这个Web服务,生成的代理方法签名用于调用我的上传功能:
public int upload(string filename, byte[] data)
我的问题是我想要传输数据变量,因为它可能非常大。这就是为什么在服务器端我使用DataHandler类而不是字节数组。 但是在客户端,如果我天真地调用这样的上传方法(使用3.8GB文件):
svc.upload(Path.GetFileName(path), File.ReadAllBytes(path));
我得到一个例外,因为C#程序试图将整个文件加载到内存中...我明白,我也会崩溃:)
所以我认为我需要将Stream对象传递给代理方法,但我不知道如何。
你有什么想法吗?
哦顺便说一句,在我的app.config中,我设置了transferMode =" Streamed"在我的绑定标签中。
非常感谢,
尼古拉斯
编辑:废话,我复制了一个未回答的问题...真的很抱歉。 见How to use Stream instead of byte[] in C# client with a Java MTOM webservice