1

我正在尝试从 CRM 4.0 中检索联系人列表,但我遇到了身份验证问题。根据我的阅读,列出所有客户的方法是解析从 ExportAllXmlRequest 返回的 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) 我可以采取哪些措施来解决此身份验证问题。

4

3 回答 3

2

您的代码不正确。您正在混合使用元数据服务CRM 服务

为了与 CRM 数据交互,您应该使用CRM 服务发现服务类似于 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 服务的连接。要检索数据,您可以使用RetrieveMultipleCrmService 的方法。

 // 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);
于 2011-05-09T20:02:49.137 回答
1

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

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

于 2011-05-06T15:15:30.813 回答
0

如果您在插件中工作或在您无权访问底层 SQL 数据库的 CRM Online 版本中工作,那么上面 ckeller 的回答很好。如果这是在本地安装中,并且您具有对 CRM 表的 SQL 服务器访问权限,则直接查询 SQL 表或视图以读取实体信息通常更快、更直接。您只需要执行以下 SQL 查询并使用 SQL 数据读取器或数据表读出结果 -

SELECT * FROM OrgName_MSCRM.dbo.FilteredContact
于 2011-05-28T20:21:35.547 回答