Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SharePoint错误:服务器不允许大于2097152字节的邮件_Sharepoint_Sharepoint 2013_Csom - Fatal编程技术网

SharePoint错误:服务器不允许大于2097152字节的邮件

SharePoint错误:服务器不允许大于2097152字节的邮件,sharepoint,sharepoint-2013,csom,Sharepoint,Sharepoint 2013,Csom,我有指向sharepoint 2013 Office 365的web服务。我使用客户机对象模型。我正在尝试更新xml文件,其中存储了4个附件。当我在xml文件中有大量二进制数据时执行此操作时,会出现以下错误: 信息 请求消息太大。服务器不允许发送消息 大于2097152字节 我意识到我可能必须将附件与xml文件分开,但目前我的infopath表单将它们存储在那里。有没有一种方法可以增加请求的长度,或者节省时间或者其他什么。我实际上只是修改了一个节点,除非更新xml,否则它将无法工作。谢谢代码如下

我有指向sharepoint 2013 Office 365的web服务。我使用客户机对象模型。我正在尝试更新xml文件,其中存储了4个附件。当我在xml文件中有大量二进制数据时执行此操作时,会出现以下错误:

信息

请求消息太大。服务器不允许发送消息 大于2097152字节

我意识到我可能必须将附件与xml文件分开,但目前我的infopath表单将它们存储在那里。有没有一种方法可以增加请求的长度,或者节省时间或者其他什么。我实际上只是修改了一个节点,除非更新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();

SharePoint对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 server代码后,我发现可以通过属性
ClientRequestServiceSettings.MaxParseMessageSize
设置此参数

我们现在正在SharePoint 2013中使用以下脚本,它非常有效:

$ws = [Microsoft.SharePoint.Administration.SPWebService]::ContentService 
$ws.ClientRequestServiceSettings.MaxReceivedMessageSize = 209715200 
$ws.ClientRequestServiceSettings.MaxParseMessageSize = 209715200 
$ws.Update()  

希望能帮一些人省去头痛

我刚刚在SharePoint 2013中遇到了这个问题,在查看了it声明之后:

文件创建信息类上的内容属性。最大文件数 可上载的大小为2MB。30分钟后超时 分钟。用于仅上载小于2 MB的文件

但是,如果设置
ContentStream
属性,则不会达到相同的文档大小限制。文件规定:

FileCreationInformation类上的ContentStream属性。没有文件 大小限制。30分钟后超时。建议用于: -SharePoint Server 2013。 -文件小于10 MB时SharePoint Online


文档中还详细介绍了一些其他选项,但希望这将有助于遇到同样问题的其他人。

前面我使用了这种方法,并遇到了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;

使用.ContentStream而不是.Content

 //newFile.Content = System.IO.File.ReadAllBytes(file);


newFile.ContentStream = new MemoryStream(System.IO.File.ReadAllBytes(file));

我需要停止Sharepoint计时器服务,输入上面的脚本,然后再次启动该服务,以使其正常工作。@Erwin我想不起来必须这样做。但我想这只是在使用SharePoint时必须接受的看似随机的beavior。无论如何,谢谢你的反馈。谢谢!你帮我节省了几个小时的挖掘时间!:)非常感谢。不知道为什么MaxParseMessageSize没有被广泛记录。。。为你找到这个补丁向你致敬。。。。它对我来说非常有效…对于任何需要恢复此更改的人来说,在我们的案例中,SPS2013中两个属性的默认值都是0。我通过使用避免了大小问题,下面是一个成功使用的示例。