使用MTOM和流式传输从C#客户端向Glassfish发送大文件

时间:2014-07-03 12:53:24

标签: java c# glassfish streaming mtom

我正在开发一个必须能够接收潜在大文件(最多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

0 个答案:

没有答案