2

实际上,我正在尝试在 Windows 应用程序的共享点列表中添加项目。当我添加 Web 参考并能够获取 Lists.asmx 列出的所有产品时,一切都很好。当我执行我的程序并尝试调用 listServiceObj.GetListAndview("Customers",""); 它给了我错误 "The request failed with HTTP status 401: Unauthorized" 。请注意,此时我的凭据和服务参考网址是;

        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

4

1 回答 1

0

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

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

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

请参见下面的示例。

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");
    }
}
于 2012-12-12T12:38:57.150 回答