我目前正在尝试将C#程序与Sharepoint连接。我拥有:Sharepoint URL,用户名和密码,没有Sharepoint.dll(客户端机器,没有Microsoft.Sharepoint命名空间,因此我使用Sharepoint Web Services),Visual Studio 2010 Ultimate。
到目前为止我做了什么:
在我的项目中添加了“服务参考”,其中包含我的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
,这些都是只读的。
答案 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请求轻松获取内容。它有一些项目限制的问题,但通常更方便。