我有指向SharePoint 2013 Office 365的Web服务。 我使用客户端对象模型。 我正在尝试更新在其中存储 4 个附件的 xml 文件。 当我在xml文件中有大量二进制数据时执行此操作时,出现以下错误:
消息
我请求消息太大。服务器不允许邮件 大于 2097152 个字节。
意识到我可能不得不将附件与 xml 文件分开,但目前我的信息路径表单将它们存储在那里。 有没有办法增加请求长度,或者可能节省什么。 我真的只是修改一个节点,除非我更新 xml,否则它将无法工作。 谢谢。代码如下。
我的代码:
ListItem docReq = GetDocRequestLight(docRequestID, businessID);
string fPath = (string)docReq["FileRef"];
using (FileInformation fInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(ctx, fPath))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fInfo.Stream);
XmlNamespaceManager xmlNameSpaceMgr = new XmlNamespaceManager(xmlDoc.NameTable);
xmlNameSpaceMgr.AddNamespace("my", DocReqXmlNameSpace);
// Get Parent Node
XmlNode node = xmlDoc.SelectSingleNode(GetXPathFromItemKey(velmaKey), xmlNameSpaceMgr);
DateTime outDate;
bool outBool;
if (DateTime.TryParse(newValue, out outDate))
node.InnerText = outDate.ToString("yyyy-MM-dd");
if (Boolean.TryParse(newValue, out outBool))
node.InnerText = newValue;
// Update Statuses
XmlNode statusIDNode = xmlDoc.SelectSingleNode(DocReqStatusIDFieldXPath, xmlNameSpaceMgr);
statusIDNode.InnerText = updatedStatus.ID.ToString();
XmlNode statusNode = xmlDoc.SelectSingleNode(DocReqStatusFieldXPath, xmlNameSpaceMgr);
statusNode.InnerText = updatedStatus.Name.ToString();
// Save File
docReq.File.SaveBinary(new FileSaveBinaryInformation()
{
Content = Encoding.UTF8.GetBytes(xmlDoc.OuterXml),
});
ctx.ExecuteQuery();
对 CSOM 有自己的限制。遗憾的是,由于显而易见的原因,这些限制无法在管理中心中配置,也无法使用 CSOM 进行设置。
在谷歌上搜索问题时,主要是通过将ClientRequestServiceSettings.MaxReceivedMessageSize
属性设置为所需的大小来给出解决方案。
从 SharePoint 命令行管理程序调用以下 PowerShell 脚本:
$ws = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ws.ClientRequestServiceSettings.MaxReceivedMessageSize = 209715200
$ws.Update()
这会将限制设置为 200 MB。
但是,在SharePoint 2013中,Microsoft显然添加了另一个配置设置,以限制服务器应从CSOM请求处理的数据量(为什么有人会以不同的方式配置此设置超出了我的范围......在阅读了一个非常非常长的 SharePoint 日志文件并爬取了一些反汇编的 SharePoint 服务器代码后,我发现可以通过属性 ClientRequestServiceSettings.MaxParseMessageSize
设置此参数。
我们现在在 SharePoint 2013 中使用以下脚本,它工作得很好:
$ws = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ws.ClientRequestServiceSettings.MaxReceivedMessageSize = 209715200
$ws.ClientRequestServiceSettings.MaxParseMessageSize = 209715200
$ws.Update()
希望能省去一些人的头痛!
> 我刚刚在SharePoint 2013中遇到了这个问题,在查看文档后,它指出:
类上的内容属性。 最大文件 可以上传的大小为 2 MB。超时发生在 30 之后 纪要。 用于上传仅小于 2 MB 的文件。
但是,如果设置 ContentStream
属性,则不会达到相同的文档大小限制。文档指出:
类上的 ContentStream 属性。 无文件 大小限制。超时发生在 30 分钟后。 推荐用于: - SharePoint Server 2013. - SharePoint Online 当文件小于 10 MB 时。
文档中还详细介绍了一些其他选项,但希望这将帮助遇到相同问题的其他人。
早些时候我使用这种方法并遇到 2MB 文件的问题
var fileCreationInfo = new FileCreationInformation
{
Content = System.IO.File.ReadAllBytes(fileName),
Overwrite = true,
Url = Path.GetFileName(fileName)
};
正如许多帖子中提到的,我尝试使用powershell脚本来增加文件大小的限制,但没有运气,然后我遵循以下方法,能够上传文件大小100MB。
FileStream fs = new FileStream(fileName, FileMode.Open);
FileCreationInformation fileCreationInfo = new FileCreationInformation();
fileCreationInfo.ContentStream = fs;
fileCreationInfo.Url = Path.GetFileName(fileName);
fileCreationInfo.Overwrite = true;
使用 .内容流而不是 .内容
//newFile.Content = System.IO.File.ReadAllBytes(file);
newFile.ContentStream = new MemoryStream(System.IO.File.ReadAllBytes(file));