次の方法で共有


Azure Service Bus の統合

Microsoft Dataverse は、Azureとの統合に対応しています。 開発者は、実行コンテキストと呼ばれるランタイム メッセージ データをクラウド内の 1 つ以上の Azure ソリューションに渡す Dataverse にプラグインを登録できます。 この機能は、Azure が、実行時コンテキストを外部基幹業務 (LOB) アプリケーションに通信するための、サポートされている数少ないソリューションの 1 つであるため、特に重要です。

Azure Service Bus は Dataverse ランタイムデータと外部クラウドベースの基幹業務 (LOB) アプリケーションの間で、安全かつ信頼性の高い通信チャネルを提供します。 この機能が特に役立つのは、異種 Dataverse システムまたは他の Dataverse サーバーと、ビジネス データ変更との同期を保つ場合です。

接続の主な要素

Dataverse とAzure Service Bus 間の接続を実装する主な要素については後述します。 次のセクションの図には、操作中のこれらの要素が表示されます。

データ コンテキスト

データ コンテキストには、現在の Dataverse 操作で処理されるビジネス データが含まれます。 ユーザー、ワークフロー、またはアプリケーションは、特定の Dataverse 操作を要求すると、この処理を開始します。 イベント パイプラインは、パイプラインが現在処理している特定の要求とテーブルの組み合わせで実行するために登録されているプラグインまたはカスタム ワークフロー アクティビティにデータ コンテキストを渡します。 データ コンテキストは、イベント実行パイプラインに沿って渡されたときに IPluginExecutionContext 型であり、Service Bus にポストされたときに RemoteExecutionContext されます。

Azure Service Bus に投稿されるメッセージ内に含まれるデータ コンテキストは、既定の .NET バイナリ形式に加え、 XML または JSON 形式である場合があります。 このようなデータ形式をサポートすることで、Azure がホストする .NET 以外のクライアントがサービスバスから Dataverse データを読み取ることができる、クロス プラットフォームの相互運用性が実現します。

重要

HTTP ペイロード全体のサイズが 192 KB を超えると、次のプロパティが削除されます。

ParentContextInputParametersPreEntityImagesPostEntityImages

一部の操作には、これらのプロパティが含まれていません。

  • 追加のデータが削除された後にペイロードのサイズが 192 KB 未満の場合、システムは MessageMaxSizeExceeded に追加のプロパティを追加します。 このプロパティは、一部のデータが切り捨てられていることを示します。
  • 追加のデータが削除された後にペイロードのサイズが 192 KB を超えると、エラーが発生し、メッセージは送信されません。

前述のテクノロジの詳細については、以下を参照してください。

プラグイン

プラグインは、データ コンテキストを含むメッセージの Azure Service Bus への投稿を開始するために使用できる 2 つの方法のうちの 1 つです。 もう 1 つの方法は、カスタム ワークフロー アクティビティです。 Dataverse-Azure 接続機能では、既定 (OOB) とカスタムの 2 種類のプラグインがサポートされています。 どちらの場合も、最適なシステム パフォーマンスを得るために、プラグインを登録して非同期的に実行します。

Azure 対応の既定 (OOB) プラグインを使用できます。 プラグイン登録ツールを使用してサービス エンドポイントを登録して、Dataverse に登録します。 イベント実行パイプラインにプラグインの「ステップ」を登録し、プラグインが実行して投稿通知を行うトリガーとなるメッセージとテーブルの組み合わせを特定する必要があります。 実行するとき、プラグインは非同期サービスを通知し、サービス エンドポイント通知サービス (IServiceEndpointNotificationService) を介し、現在の要求データ コンテキストを Azure Service Bus に投稿します。

Azure 対応の独自のカスタム プラグインを記述することもできます。 カスタムプラグインはサンドボックスで実行されます。 カスタム プラグインは、サービス エンドポイントの通知を介し、サービス バスに対するデータ コンテキストの投稿を開始することができます。 このサービスを呼び出すコードを追加すると、プラグインは Azure に対応します。

プラブイン全般の詳細については、 プラグインの記述を参照してください。 Azure 対応プラグインの詳細については、Azure 対応のカスタム プラグインの記述 を参照してください。

ユーザー定義のワークフロー活動

プラグインと同様に、カスタム ワークフロー アクティビティを記述して、サービス エンドポイント通知サービスを使用して、現在の要求メッセージ データ コンテキストの Azure Service Bus への投稿を開始できます。 詳細については、「 ワークフロー拡張機能」を参照してください。

非同期サービス

サービス エンドポイント通知サービスから通知されると、非同期サービスは、イベント実行パイプラインによって現在処理されている要求メッセージのデータ コンテキストを Azure Service Bus に投稿します。 各ポストは非同期サービスのシステム ジョブによって実行されます。 ユーザーは、 Power Apps Web アプリケーションのシステム ジョブビューを使用して、各システム ジョブのステータスを表示することができます。 Web アプリケーションで、 詳細設定 を選択して従来の Dynamics 365 インターフェイスを表示します。 続いて設定>システム ジョブを選択します。

非同期サービスの詳細については、非同期サービスを参照してください。

Microsoft Azure Service Bus

サービスバスは Dataverse とAzure サービス バス ソリューション リスナー アプリケーションの間で要求されたメッセージのデータ コンテキストを中継します。 また、サービス バスは、承認されたアプリケーションのみが投稿された Dataverse データにアクセスすることができるよう、データ セキュリティを提供します。 Dataverse がサービス バスにデータ コンテキストを投稿し、リスナー アプリケーションがそれを読み取るための承認は、Azure Shared Access Signatures (SAS) によって管理されます。

サービス バスの詳細については、サービス バス を参照してください。 サービス バス認証の詳細については、 サービス バスの認証および承認 を参照してください。

Microsoft Azure ソリューション

Dataverse と Azure 接続を機能させるには、Azure Service Bus ソリューション アカウントに少なくとも 1 つのソリューションが含まれている必要があり、そのソリューションには 1 つ以上のサービス エンドポイントが含まれている必要があります。 リレー エンドポイント コントラクトの場合、"Dataverse 対応" のリスナー アプリケーションは、Service Bus 上の Dataverse 要求のエンドポイントでアクティブにリッスンする必要があります。 キュー エンドポイント コントラクトの場合、リスナーはアクティブにリッスンする必要はありません。 リスナーを Dataverse 対応にするには、 Microsoft.Xrm.Sdk アセンブリにリンクして、 RemoteExecutionContext 型を定義します。 詳細については、「 Microsoft Azure ソリューションのリスナーを記述する」を参照してください。

Dataverse は Azure イベント ハブ ソリューションへのエベントデータの送信に対応しています。 イベント ハブの詳細については、「 Azure Event Hubs ソリューションでイベント データを操作する」を参照してください

Dataverse をサービス バス シナリオへ

このシナリオでは、前述の接続コンポーネントを実装します。 前提条件として、Dataverse をサポートされている発行者として認識するように SAS を構成し、Dataverse がリスナーがあるエンドポイントに投稿できるようにする規則を使用して Azure Service Bus ソリューションを構成します。

次の図は、シナリオを構成する物理要素を示しています。

Dynamics 365 からサービス バスへのシナリオ。

この図に示すイベントの順序は次のとおりです。

  1. Azure Service Bus ソリューション エンドポイントにリスナー アプリケーションを登録します。 リスナーは、Service Bus で Dataverse リモート実行コンテキストのアクティブなリッスンを開始します。

  2. ユーザーは、登録済みの OOB プラグインまたはカスタム Azure 対応プラグインの実行をトリガーとする Dataverse での操作を実行します。 プラグインが、非同期サービス システム ジョブを介して、現在の要求データ コンテキストのサービス バスへのポストを開始します。

  3. Dataverse によってポストされたクレームが認証されます。 続いてサービス バスは、リモート実行コンテキストをリスナーに渡します。 リスナーはコンテキスト情報を処理し、その情報に対してビジネス関連タスクを実行します。 サービス バスから非同期サービスにポストの成功が通知され、関連するシステム ジョブが完了ステータスに設定されます。

Dataverse と Azure ソリューションの契約の確立

ソリューション エンドポイントごとに、Service Bus でのこれらのリモート実行コンテキスト "メッセージ" の処理と、エンドポイントで使用する必要があるセキュリティを定義するコントラクトを構成します。 エンドポイントは、次に示すサポートされているコントラクトのいずれかを使用して Service Bus メッセージを受信します。

キュー

キュー契約は、クラウドでメッセージ キューを提供します。 キュー コントラクトを使用する場合、リスナーはエンドポイントでメッセージをアクティブにリッスンする必要はありません。 キューには破壊読み取りと非破壊読み取りがあります。 破壊的読み取りでは、キューから使用可能なメッセージが読み取られ、メッセージが削除されます。 非破壊的読み取りでは、キューからメッセージは削除されません。

Dataverse では、永続的なキューがサポートされています。 永続的なキューには、コードで指定できる長いが有限のメッセージ可用性期間があります。

単一方向

一方向契約ではアクティブなリスナーが必要です。 エンドポイントにアクティブなリスナーがない場合、サービス バスへのポストが失敗します。 Dataverse は、要求を投稿する非同期システム ジョブが最終的に中止され、状態が [失敗] に設定されるまで、指数関数的に大きく、より長い期間でポストを再試行します。

二方向

双方向契約は、リスナーからポストを開始した Dataverse プラグインやカスタム ワークフローのアクティビティに文字列の値を返すことができる点を除き、一方向契約と共通しています。

REST

REST 契約は REST エンドポイントでの二方向契約に似ています。

トピック

トピックはキューに似ていますが、1 つ以上のリスナーがトピックからメッセージを受信するためにサブスクライブできる点が異なります。

Event Hubs

この契約の種類は Azure Event Hubs ソリューションに適用されます。

契約の構成では、契約で使用されるセキュリティの種類を指定します。 契約は、Transport Layer Security (TLS) または Secure Sockets Layer (SSL) (https) を使用するトランスポート セキュリティを使用できます。

クレームの認証は、サービス バスに対するセキュリティで保護されたアクセスに使用されます。 サービス バスへの認証で使用されるクレームは、 Dataverse 内で生成され、 Dataverse 構成データベースに指定されている AppFabricIssuer 証明書が署名します。

ランタイム エラーの管理

Service Bus への事後試行後にエラーが発生した場合は、Web アプリケーションの関連システム ジョブの状態でエラーの詳細を確認します。 Service Bus がダウンしているか、リスナーまたはエンドポイントが使用できない場合、Dataverse で処理されている現在のメッセージはバスにポストされません。 非同期サービスは、最初に頻繁に投稿し、次に長い間隔で送信しようとする指数パターンでメッセージを投稿しようとします。 内部 Dataverse エラーの場合、メッセージの投稿は試行されません。 外部サービス バスまたはネットワーク エラーの場合、関連するシステム ジョブは 待機 状態です。