利用 Web Service 在 SharePoint 文档库中建立文件夹的2个注意点

   最近有个项目,需要做一些文件的管理,为了简化文件的管理决定将文件存储至公司的 SharePoint 2007 服务器上。由于文件需要分类就需要自动根据文件在 SharePoint 网站的文档库中建立文件夹。

   由于无法直接在 SharePoint Server 部署C#程序,因此只能远程调用 SharePoint 2007 的 Web Service。

 

1.Web Service 引用的SharePoint网站错误引起文件夹创建失败

    由于 SharePoint 的层次结构比较特殊,允许一个网站集下下挂多个虚拟的“网站”。因此,在Visual Studio 2005/2008 中进行 Web 引用时请注意 WebService 所在的网站。

    例如:有 SharePoint 访问地址 http://servername/sites/files。其中 sites 和 files 分别为整个网站集的 二级 和 三级
“网站”。因此,如果用户需要在“网站” “files” 下调用 Web Service ,则引用地址设置为 http://servername/sites/files/_vti_bin/dws.asmx。
请注意:光在此引用还不行,需要在代码中手工指定Web Service代理所引用的地址。

以下代码是我声明一个WebService代理,用于在文档库“DocLib1”中建立文件夹“Test1”,并手工指定代理的url的代码。其中CreateFolder(string) 返回的是一个 string 值,
如果返回为<Result/>则说明执行成功。“DocLib1”为网站files下的“库”的英文名,用户可以进入此库之后在地址栏中看到
http://sp.sim.com/sites/files/DocLib1/Forms/AllItems.aspx

SimSharePointDws.Dws myDws = new SimSharePointDws.Dws(); myDws.Credentials = new System.Net.NetworkCredential(useranme, password, domain); myDws.Url = "http://servername/sites/files/_vti_bin/dws.asmx"; myDws.CreateFolder("DocLib1/Test1");

 

2.因目录权限分配不合理造成创建文件夹失败 

    SharePoint 的 Web Service 建立文件夹的时候会进行用户认证,有文档库路径 DocLib1/Test1/T1 如果用户之拥有 T1 的完全控制权限,却没有拥有 Test1 的任何访问权限时就会出现 "FolderNotFound" 的返回错误。经过排查,CreateFolder 方法在建立目录时候是循环查询各级目录,直至最后一个目录 T1 ,如果用户无中间任何一级目录的访问权限检查就会失败,CreateFolder方法会认为此目录不存在。此时只需要为创建目录的帐号在缺失权限目录分配“仅查看”权限即可。这样CreateFolder方法就会正常的找到每级目录,正常创建目录了。

 

 

 

参考资料:

 

BLOG: MSDN 的一点小误解(创建文件夹出错)

MSDN: Dws.CreateFolder 方法 

 

你可能感兴趣的:(Web,webservice,String,service,文档,SharePoint)