0

我遇到了一個有趣的情況。我需要從WPF應用程序和Silverlight應用程序訪問SharePoint網站資產庫。我的Silverlight應用程序100%工作,但我的WPF應用程序從服務中獲取(500)內部服務器錯誤。Sharepoint COM可從Silverlight中使用,但不能從WPF使用

的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設置。

+1

我建議您不要將客戶端對象模型縮寫爲「COM」。 COM更可能被理解爲「組件對象模型」。 –

回答

1

解決!爲什麼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; 
相關問題