【问题标题】:Unauthorized in Dynamics CRM在 Dynamics CRM 中未经授权
【发布时间】:2011-05-06 14:31:53
【问题描述】:

我正在尝试从 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) 我可以做些什么来解决此身份验证问题。

【问题讨论】:

    标签: c# dynamics-crm dynamics-crm-4 crm microsoft-dynamics


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我的设置设置为低安全性,但将站点添加到受信任列表似乎没有效果。
      【解决方案3】:

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

      SELECT * FROM OrgName_MSCRM.dbo.FilteredContact
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        • 2016-09-09
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 2018-01-10
        相关资源
        最近更新 更多