在动态 CRM 中未经授权

本文关键字:授权 动态 CRM | 更新日期: 2023-09-27 17:55:43

我正在尝试从CRM 4.0检索联系人列表,但是在进行身份验证时遇到问题。根据我所读到的内容,列出所有 clinet 的方法是解析从 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)我可以做些什么来解决此身份验证问题。

在动态 CRM 中未经授权

您的代码不正确。您正在混合元数据服务和 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 服务的连接。要检索数据,您可以使用 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);

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

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

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

SELECT * FROM OrgName_MSCRM.dbo.FilteredContact