カスタム スケジュール メッセージング サービスを作成する
Microsoft BizTalk ESB Toolkit の一部であるスケジュール フレームワークでは、スケジュール メッセージング サービスを実行する IMessagingService インターフェイスを実装するクラスを使用した旅程ステップの実行がサポートされています。 サービスが次の役割を担う必要がある場合は、カスタム メッセージング サービスを実装できます。
スケジュールで構成されたカスタム メッセージ検証
スケジュールで構成されたカスタム メッセージ変換
メッセージのカスタム処理
いずれの場合も、実装するカスタム スケジュール サービスはインターセプターとして機能し、Dispatcher パイプライン コンポーネントによって呼び出されます。
カスタム メッセージング ベースのスケジュール サービスまたはメッセージング サービスはすべて、 IMessagingService インターフェイスを 実装します。 このインターフェイスは 、Name プロパティと SupportsDisassemble プロパティと Execute メソッドと ShouldAdvanceStep メソッドを公開します。
Name プロパティは、旅程に表示されるサービスの名前です。 これは、Esb.config ファイルのスケジュール サービス構成で構成された名前と一致する必要があります。
SupportsDisassemble プロパティは、作成するカスタム メッセージング サービスが逆アセンブリと複数のリゾルバーの実行をサポートするかどうかを示します。
ShouldAdvanceStep メソッドは、現在のスケジュール ステップと現在のメッセージを受け取り、サービスの実行後にディスパッチャーが旅程を進める必要があるかどうかを示すブール値を返します。 ほとんどの場合、このメソッドは true を返す必要があります。
Execute メソッドはメッセージング サービスにとって最も重要であり、実行時に実行されるロジックが含まれています。 パイプライン コンテキスト、メッセージ、リゾルバー文字列、および現在のスケジュール ステップを受け取ります。更新されたメッセージを返します。
Execute メソッドの参照実装は、ESB の RoutingService.cs ファイルにあります。次のコードに示すように、Itinerary.Services プロジェクト。
public IBaseMessage ExecuteRoute(IPipelineContext context, IBaseMessage msg, string resolverString)
{
if (context == null)
throw new ArgumentNullException("context");
if (msg == null)
throw new ArgumentNullException("msg");
if (string.IsNullOrEmpty(resolverString))
throw new ArgumentException(Properties.Resources.ArgumentStringRequired, "resolverString");
try
{
ResolverInfo info = ResolverMgr.GetResolverInfo(ResolutionType.Endpoint, resolverString);
if (!info.Success)
throw new RoutingException(Properties.Resources.ResolverStringInvalid, resolverString);
// Resolve configuration for routing.
Dictionary<string, string> resolverDictionary = ResolverMgr.Resolve(info, msg, context);
if (string.IsNullOrEmpty(resolverDictionary["Resolver.TransportLocation"]))
throw new RoutingException(Properties.Resources.TransportLocationNotResolved, resolverString);
AdapterMgr.SetEndpoint(resolverDictionary, msg.Context);
return msg;
}
catch (System.Exception ex)
{
EventLogger.Write(MethodInfo.GetCurrentMethod(), ex);
throw;
}
}
メッセージング用のカスタム スケジュール サービスを実装するには
IMessagingService から派生したクラスを持つアセンブリを作成します。Execute メソッドには、メッセージまたはメッセージ コンテキスト (存在する場合) に変更を加えるために必要なすべてのロジックを含めます。
id 属性として GUID を持つ itineraryService 要素、name 属性としてのサービスの名前、type 属性としてのクラスの完全修飾名、スコープ属性としての Messaging、および許可されるステージを追加<して、サービスの Esb.config ファイルの itineraryServices> セクションにエントリを追加します (たとえば、OnRampReceive、OnRampSend、OffRampSend、OffRampReceive、AllSend、AllReceive、または All) をステージ属性として指定します。
新しいアセンブリをグローバル アセンブリ キャッシュに登録します。