2011-05-06 93 views
1

我試圖從CRM 4.0中檢索聯繫人列表,但我在驗證過程中遇到問題。從我讀過的東西,列出所有clinets的方法是解析從ExportAllXmlRequest在Dynamics CRM中未授權

返回的XML的問題是,當我瀏覽到http://crmserver/MSCRMServices/2007/spla/CRMDiscoveryService.asmx,我得到一個401.2未經授權,沒有及時進行身份驗證。如果我通過Visual Studio添加Web引用,我會得到一個不接受我的憑證的密碼提示。我也嘗試過使用以下代碼進行身份驗證,但都沒有成功。 Windows身份驗證和匿名身份驗證都在服務器上啓用。

CrmService svc = new CrmService(); 
// this doesn't work 
svc.UseDefaultCredentials = true; 

// this doesn't work either 
svc.Credentials = new NetworkCredential("myuser", "password", "mydomain"); 
svc.Credentials= System.Net.CredentialCache.DefaultCredentials; 
ExportAllXmlRequest request = new ExportAllXmlRequest(); 

ExportAllXmlResponse response = (ExportAllXmlResponse)svc.Execute(request); 
string resp=string.Empty; 
using (StreamReader reader = new StreamReader(response.ExportXml)) { 
    resp = reader.ReadToEnd(); 
} 
return resp; 

有1)一種更容易的清單CRM接觸的方法; 2)這是我能做的來解決這個身份驗證問題。

回答

1

這絕對不是您需要檢索實體記錄的方式。 ExportAllXmlRequest將爲您的CRM環境提取自定義信息,但不會有實際記錄。您需要RetrieveMultipleRequest(sdk鏈接:http://msdn.microsoft.com/en-us/library/bb929303.aspx)。

至於身份驗證問題,是您的CRM網站在您的IE列表中的信任或Intranet網站?

+0

我的設置被設置爲低安全性,但將該網站添加到可信列表似乎沒有影響。 – Echilon 2011-05-07 10:06:43

2

您的代碼不正確。您正在混合Metadata ServiceCRM Service

對於與CRM數據交互,您應該使用CRM ServiceDiscovery Service就像CRM部署的黃頁。

// Set up the CRM Service. 
var token = new CrmAuthenticationToken(); 
token.AuthenticationType = 0; 
token.OrganizationName = "{yourorgname}"; 

var service = new CrmService(); 
service.Url = "http://<servername>:<port>/mscrmservices/2007/crmservice.asmx"; 
service.CrmAuthenticationTokenValue = token; 
service.Credentials = System.Net.CredentialCache.DefaultCredentials; 

這創建了與CRM服務的連接。 要檢索數據,您可以使用CrmService的RetrieveMultiple方法。

// Create the QueryExpression object. 
var query = new QueryExpression(); 

// Set the properties of the QueryExpression object. 
query.EntityName = EntityName.contact.ToString(); 
query.ColumnSet = new AllColumns(); 

// Retrieve the contacts. 
BusinessEntityCollection contacts = service.RetrieveMultiple(query); 
0

如果您正在插件或CRM Online版本中使用基礎SQL數據庫,ckeller的回答很好。如果這是在內部部署安裝中,並且您有SQL服務器訪問CRM表的權限,則通常更快,更直接地查詢SQL表或視圖以直接讀取實體信息。您只需執行以下SQL查詢並使用SQL數據讀取器或數據表讀出結果 -

SELECT * FROM OrgName_MSCRM.dbo.FilteredContact