C#/ VS2010 / Sharepoint列表连接

时间:2011-07-14 08:16:17

标签: c# sharepoint

我目前正在尝试将C#程序与Sharepoint连接。我拥有:Sharepoint URL,用户名和密码,没有Sharepoint.dll(客户端机器,没有Microsoft.Sharepoint命名空间,因此我使用Sharepoint Web Services),Visual Studio 2010 Ultimate。

我遵循了本教程:http://www.scribd.com/doc/8634090/Accessing-SharePoint-Data-Using-C-Without-Running-Code-On-the-SharePoint-Server-Part-1

到目前为止我做了什么:

在我的项目中添加了“服务参考”,其中包含我的Sharepoint的网址,如

https://.../content/10003194/_vti_bin/lists.asmx

和我的代码:

//no TestSP.Lists here...
TestSP.ListsSoapClient cl = new TestSP.ListsSoapClient();
cl.Open();

String listGUID = "A9E7107B-7AF6-42DC-A1A7-6C898D55D23E";
String viewGUID = "684F5F8A-B32E-461C-BD53-677F84A9C101";

//this is where it crashes
System.Xml.Linq.XElement data = cl.GetListItems(listGUID, viewGUID, null, null, "1000", null, "");

IEnumerable<XElement> elements = data.Elements();

foreach (XElement el in elements)
{
    Console.WriteLine(el);
}

它在指定的行崩溃:

HTTP请求未经授权,客户端身份验证方案为“匿名”。从服务器收到的身份验证标题是“Negotiate,NTLM,Basic realm =”......“”

这很可能是因为我没有指定用户名和密码。网上的各种教程显示,凭据可以像这样设置:

TestSP.Credentials = System.Net.CredentialCache.DefaultCredentials;

问题是:没有TestSP.Lists,因此我使用了TestSP.ListsSoapClient,其中只有Credentials,只有ClientCredentials,这些都是只读的。

1 个答案:

答案 0 :(得分:1)

您可能使用了新的“添加服务参考”,而不是“添加网络参考”。这会创建一个类似于WCF(带有Client后缀)的包装器,而不是基于Soap的包装器。您可以使用以下方式指定其凭据:

TestSP.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

“添加Web引用”在Visual Studio 2010中隐藏。如果需要,可以still use it to generate code similar to your tutorial,但服务引用也可以正常工作。

另请参阅:ClientBase<>.ClientCredentials


附注:如果您只是根据视图读取列表项,则可能需要考虑使用xml视图 - Getting XML Data From a SharePoint List。您可以通过执行Web请求轻松获取内容。它有一些项目限制的问题,但通常更方便。