C# 向IBM Content Manager Web服务发送和接收大型MTO附件
当尝试上载大文件(100-500MB)时,我会遇到熟悉的“OutOfMemoryException”,这是由于试图立即将整个文件读入内存(在stackoverflow上询问并回答)而导致的。我知道我应该使用流或将文件分成更小的部分。如果有帮助,可以选择手动更改代理代码。我使用特定的webservice(CMWebService) 由于我无法更改IBMs代码,有没有办法将文件分成更小的部分发送?我已经找到了类UpdateItemRequestAdd和UpdateItemRequestAddPart,但是我无法让它们工作。不幸的是,IBM也没有可用的示例 接收文件也会带来同样的问题,我一直找不到任何能在这方面帮助我的类 这是我当前用于上载文件的代码:C# 向IBM Content Manager Web服务发送和接收大型MTO附件,c#,.net,web-services,mtom,C#,.net,Web Services,Mtom,当尝试上载大文件(100-500MB)时,我会遇到熟悉的“OutOfMemoryException”,这是由于试图立即将整个文件读入内存(在stackoverflow上询问并回答)而导致的。我知道我应该使用流或将文件分成更小的部分。如果有帮助,可以选择手动更改代理代码。我使用特定的webservice(CMWebService) 由于我无法更改IBMs代码,有没有办法将文件分成更小的部分发送?我已经找到了类UpdateItemRequestAdd和UpdateItemRequestAddPart
string resources0 = "tiffFileContent";
string resources1 = "image/tiff";
string resources2 = @"D:\myImageFile.tif";
CreateItemRequest createRequest = new CreateItemRequest()
{
AuthenticationData = data,
Item = new CreateItemRequestItem()
{
ItemXML = new ItemXML()
{
MYITEMTYPE = new MYITEMTYPE()
{
ArchiveId = "4719",
ICMBASE = new ICMBASE[] {
new ICMBASE(){
resourceObject = new LobObjectType()
{
label = new LobObjectTypeLabel()
{
name= resources0
},
MIMEType = resources1,
originalFileName = resources2
},
}
}
}
},
},
mtomRef = new MTOMAttachment[] { new MTOMAttachment() {
ID = resources0,
MimeType = resources1,
Value = System.IO.File.ReadAllBytes(resources2), // Error on large files
}},
};
var createReply = service.CreateItem(createRequest);
我们“解决”了这个问题,告诉我们的客户获得一个具有更多RAM的更强大的系统。有了4-8GB的RAM,我们可以毫无问题地上传高达200MB的文件
接收到大文件后,IBM Content Manager中的Java HeapSize必须增加。
是的,这个问题中的代码帮助我解决了一个不相关的问题:-)