0

我遇到了一个有趣的情况。我需要从 WPF 应用程序和 Silverlight 应用程序访问 SharePoint 网站资产库。我的 Silverlight 应用程序 100% 工作,但我的 WPF 应用程序从服务返回 (500) 内部服务器错误。

银光代码:

    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 设置。

4

1 回答 1

1

解决了 !!为什么当 Silverlight 工作时 WPF 身份验证不起作用。(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;
于 2012-02-26T12:16:44.230 回答