我遇到了一个有趣的情况。我需要从WPF应用程序和Silverlight应用程序访问SharePoint站点资产库。我的Silverlight应用程序工作100%,但是我的WPF应用程序从服务中得到一个(500)内部服务器错误。
Silverlight代码: private void Button_Click(object sender, RoutedEventArgs e)
{
ClientContext clientContext = new ClientContext("http://myfullyQualifiedName.com");
clientContext.Load(clientContext.Web);
clientContext.ExecuteQueryAsync(onQuerySucceeded, onQueryFailed);
}
private void onQuerySucceeded(object sender, ClientRequestSucceededEventArgs args)
{
}
private void onQueryFailed(object sender, ClientRequestFailedEventArgs args)
{
}
WPF代码: private void Button_Click(object sender, RoutedEventArgs e)
{
ClientContext clientContext = new ClientContext("http://myfullyqualifiedname.com/");
//clientContext.Credentials = new NetworkCredential("UserName", "Password", "Domain");
clientContext.Load(clientContext.Web);
clientContext.ExecuteQuery();
}
我已经尝试了使用和不指定凭据,无论哪种方式我得到内部服务器错误。
我使用的Silverlight和非Silverlight Sharepoint客户端DLL的版本都是14.4762.1000。
现在,如果我将URL更改为我们的其他站点之一,WPF代码将完美地工作。所以我想一定是某个地方的SharePoint设置
解决了!!为什么WPF认证不能在Silverlight工作时工作。(WPF尝试使用Kerberos, Silverlight使用NTLM) -简单修复:
ClientContext _clientContext = new ClientContext(sharePointSiteUrl);
Web _web = _clientContext.Web;
_clientContext.Load(_web, website => website.Title);
_clientContext.Load(_web.Webs);
CredentialCache cc = new CredentialCache();
cc.Add(new Uri(sharePointSiteUrl), "NTLM", CredentialCache.DefaultNetworkCredentials);
_clientContext.Credentials = cc;
_clientContext.AuthenticationMode = ClientAuthenticationMode.Default;
_clientContext.ExecuteQuery();
ListCollection _listCollection = _web.Lists;