Car*_*ter 12 sharepoint sharepoint-2013 csom
我有指向sharepoint 2013 Office 365的Web服务.我使用客户端对象模型.我正在尝试更新存储4个附件的xml文件.当我在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();
Run Code Online (Sandbox Code Playgroud)
hel*_*elb 22
SharePoint对CSOM有自己的限制.遗憾的是,无法在管理中心中配置这些限制,并且由于显而易见的原因也无法使用CSOM进行设置.
当谷歌搜索问题时,通常通过将ClientRequestServiceSettings.MaxReceivedMessageSize属性设置为所需大小来给出解决方案.
从SharePoint Management Shell调用以下PowerShell脚本:
$ws = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$ws.ClientRequestServiceSettings.MaxReceivedMessageSize = 209715200
$ws.Update()
Run Code Online (Sandbox Code Playgroud)
这会将限制设置为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()
Run Code Online (Sandbox Code Playgroud)
希望能省一些人头疼!
小智 6
早些时候我使用这种方法并遇到了 2MB 文件的问题
var fileCreationInfo = new FileCreationInformation
{
Content = System.IO.File.ReadAllBytes(fileName),
Overwrite = true,
Url = Path.GetFileName(fileName)
};
Run Code Online (Sandbox Code Playgroud)
我尝试使用 powershell 脚本(正如许多帖子中提到的那样)来增加文件大小的限制,但没有成功,然后我按照下面的方法并能够上传 100MB 的文件大小。
FileStream fs = new FileStream(fileName, FileMode.Open);
FileCreationInformation fileCreationInfo = new FileCreationInformation();
fileCreationInfo.ContentStream = fs;
fileCreationInfo.Url = Path.GetFileName(fileName);
fileCreationInfo.Overwrite = true;
Run Code Online (Sandbox Code Playgroud)
我刚刚在 SharePoint 2013 中遇到了这个问题,并在查看了它指出的文档后:
FileCreationInformation类的内容属性。可上传的最大文件大小为 2 MB。超时发生在 30 分钟后。仅用于上传小于 2 MB 的文件。
但是,如果您设置了该ContentStream属性,则不会达到相同的文档大小限制。该文件指出:
FileCreationInformation类上的ContentStream属性。没有文件大小限制。超时发生在 30 分钟后。推荐用于: - SharePoint Server 2013。 - 文件小于 10 MB 时的 SharePoint Online。
文档中还详细介绍了其他一些选项,但希望这能帮助遇到同样问题的其他人。
小智 5
使用 .ContentStream 而不是 .Content
//newFile.Content = System.IO.File.ReadAllBytes(file);
newFile.ContentStream = new MemoryStream(System.IO.File.ReadAllBytes(file));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11791 次 |
| 最近记录: |