3

このコードにより、組織サービスを使用してオンプレミス サーバーに正常に接続しています。

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

Organization私たちのサーバーに接尾辞OrgName/XRMServices/2011/Organization.svc. CredentialsForClientは私のログイン (オンラインの場合はライブ 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 ライブ認証スキームとすべて)。

編集

少し調査した後、これがなぜなのかについての公式文書をまだ見つけていません。一般に、MSDN フォーラムでは、デバイス ID を Windows Live に関連付けることであることが認められています。これは、CRM を使用しているワークステーションを Microsoft が追跡できるようにするためでしょうか? 特定のアカウントを使用して CRM に接続できるマシン ID を制限することで、ある時点でセキュリティを強化できる可能性があります。たぶん、上記のすべて/どれも。

憶測はさておき、私の経験では、デバイス資格情報が CRM に対して認証されていない場合 (つまりOrganizationServiceProxy、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 に答える