在Dynamics CRM中未授权

问题描述:

我试图从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)这是我能做的来解决这个身份验证问题。

这绝对不是您需要检索实体记录的方式。 ExportAllXmlRequest将为您的CRM环境提取自定义信息,但不会有实际记录。您需要RetrieveMultipleRequest(sdk链接:http://msdn.microsoft.com/en-us/library/bb929303.aspx)。

至于身份验证问题,是您的CRM网站在您的IE列表中的信任或Intranet网站?

+0

我的设置被设置为低安全性,但将该网站添加到可信列表似乎没有影响。 – Echilon 2011-05-07 10:06:43

您的代码不正确。您正在混合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); 

如果您正在插件或CRM Online版本中使用基础SQL数据库,ckeller的回答很好。如果这是在内部部署安装中,并且您有SQL服务器访问CRM表的权限,则通常更快,更直接地查询SQL表或视图以直接读取实体信息。您只需执行以下SQL查询并使用SQL数据读取器或数据表读出结果 -

SELECT * FROM OrgName_MSCRM.dbo.FilteredContact