3

我通过此代码使用组织服务成功连接到本地服务器。

using (OrganizationServiceProxy proxy = new OrganizationServiceProxy(
  Organization, 
  HomeRealm, 
  CredentialsForClient, 
  CredentialsForDevice)) { ... }

Organization是我们的服务器加后缀OrgName/XRMServices/2011/Organization.svcCredentialsForClient是我的登录名(或在线时我的实时 ID)。HomeRealmCredentialsForDevice设置为null

这似乎对本地版本非常有效,但是当我上线时,我收到错误消息。我可以创建proxy变量,但是当我尝试执行下面的代码时,异常告诉我我不能有一个null值作为终点。由于我的无知,这几乎没有告诉我任何事情。

EntityCollection entityCollection = proxy.RetrieveMultiple(fetchExpression);

当然,我Organization在上网时使用的是不同的。我从在线版本的 CRM Dynamics 的设置中复制了字符串(就像我为本地版本所做的那样)。我该如何解决这个问题?

4

3 回答 3

3

您可能需要下载最新版本的 SDK 并查看示例:与 Microsoft Dynamics CRM 的简化连接。本地连接字符串和在线连接字符串不同。

[<add name="Server=CRM Online, organization=YourOrg, user=YourUserName"
         connectionString="Url=https://YourOrg.crm.dynamics.com; Username=YourUserName@YourOrg.onmicrosoft.com; Password=YourPassword"/>][2]
于 2012-09-20T13:00:13.087 回答
3

您是否看过这个示例,它展示了如何使用 Microsoft Dynamics CRM Web 服务对用户进行身份验证,而无需针对所有类型的连接、本地、在线的任何帮助代码。

于 2012-09-20T20:33:16.247 回答
1

连接到在线版本时,您必须提供设备凭据和用户凭据。就是这样(Windows live 身份验证方案和所有。)

编辑

经过一番研究,我仍然没有找到关于为什么会这样的官方文档。通常,在 MSDN 论坛上,这是为了将设备标识与 windows live 相关联。也许这是为了让微软可以跟踪哪些工作站正在使用 CRM?也许它可以通过限制哪些机器身份可以使用某些帐户连接到 CRM,从而使他们能够在某些时候增强安全性。也许以上所有/都不是。

OrganizationServiceProxy除了推测之外,根据我的经验,如果没有针对 CRM 进行身份验证的设备凭据(即通过构造函数或 IServiceManagment 实现使用的身份验证过程) ,我无法执行成功的查询。

下面,您将找到一些我用来执行此操作的旧代码。我现在建议使用@Jason Lattimer 提到的连接字符串。如果您需要处理更多并行性,请考虑使用IServiceManagement<IOrganizationService>.

    var reader = new AppSettingsReader();

    //instatantiate credential class and populate values
    var cc = new ClientCredentials();
    cc.UserName.UserName = reader.GetValue("WLID", typeof(string)).ToString();
    cc.UserName.Password = reader.GetValue("WLPS", typeof(string)).ToString();

    //repeat for device credentials
    var deviceCredentials = new ClientCredentials();
    deviceCredentials.UserName.UserName = reader.GetValue("deviceWLID", typeof(string)).ToString();
    deviceCredentials.UserName.Password = reader.GetValue("deviceWLPS", typeof(string)).ToString();


    //create a uri for the organization service location
#if DEBUG
    var orgServiceUri = new Uri(reader.GetValue("CrmNonProductionUri", typeof(string)).ToString());
#else
    Uri orgServiceUri = new Uri(reader.GetValue("CrmProductionUri", typeof(string)).ToString());
#endif
    OrganizationServiceProxy retval = new OrganizationServiceProxy(orgServiceUri, null, cc, deviceCredentials);
    retval.EnableProxyTypes();

所以,最后,我只使用一个配置文件来存储构建我的凭据和 uri 所需的各种值(对于两种环境。)

于 2012-09-28T18:18:34.127 回答