从外部Windows应用程序编辑SharePoint 2010列表。

时间:2012-12-12 11:54:55

标签: web-services sharepoint-2010 custom-lists

实际上我正在尝试从Windows应用程序添加共享点列表中的项目。当我添加Web引用并且能够获得为Lists.asmx列出的所有产品时,一切都很顺利。 当我执行我的程序并尝试调用listServiceObj.GetListAndview(“Customers”,“”); 它给了我错误“请求失败,HTTP状态401:未经授权”。请注意,此时我的凭据和服务参考的URL是;

        SpListService.Lists spListService = new SpListService.Lists();
        spListService.Credentials = System.Net.CredentialCache.DefaultCredentials;

        spListService.Url = "http://localhost/_vti_bin/Lists.asmx";


        XmlNode customerListView = spListService.GetListAndView("Customers", "");

然后我将上面的代码更改为;

        SpListService.Lists spListService = new SpListService.Lists();
        spListService.Credentials = System.Net.CredentialCache.DefaultCredentials;

        spListService.Url = "http://<PC-Name>/sites/Home/_vti_bin/Lists.asmx";


        XmlNode customerListView = spListService.GetListAndView("Customers", "");

然后我收到了以下错误;

“抛出了'Microsoft.SharePoint.SoapServer.SoapServerException'类型的异常。”

我已在完全控制组中创建了登录用户。也是管理员组的成员..但同样的结果...... 另请注意,当尝试访问“http:// localhost /”或“http:///”时,它会给我SP2010的访问被拒绝页面....相反,我必须写“http:/// sites / Home /SitePages/Home.aspx“打开我的团队网站集

我真的坚持到这个......我真的很高兴有一些解决我这个问题的方法......先谢谢 MJay

1 个答案:

答案 0 :(得分:0)

当我实现第一个SharePoint列表Web服务客户端时,我遇到了类似的问题。原因是默认情况下自动生成的客户端类实际上将其自身引入为Mozilla Web浏览器! SharePoint服务器不允许对浏览器进行基本身份验证,因此客户端实际上已重定向到防火墙登录页面。

我建议您从Lists类继承另一个类并执行以下操作:

  1. 在构造函数中设置另一个用户代理值。
  2. 将“preauthenticate”属性设置为true。这应该强制客户端在第一次请求中发送凭证,而不仅仅是在他们被要求之后。
  3. 如有必要,请尝试明确提供凭据。
  4. 请参阅下面的示例。

    public class CustomizedLists : Lists
    {
        public CustomizedLists() : base()
        {
            this.UserAgent = "Some SharePoint client";
    
            this.PreAuthenticate = true;
    
            System.Net.ICredentials creds = new System.Net.NetworkCredential("user", "pwd");
            this.Credentials = creds.GetCredential(uri, "Basic");
        }
    }