Exchange 2013 の RoutingAgent トランスポート エージェントを作成する
Exchange 2013 で使用するカスタム RoutingAgent トランスポート エージェントを作成する方法について説明します。
製品: Exchange Server 2013
関連するコード スニペットとサンプル アプリ:
RoutingAgentFactory クラスと RoutingAgent クラスは、Exchange Server 2013 メールボックス サーバー上のトランスポート サービスで実行するように設計されたトランスポート エージェントの基本クラスです。 RoutingAgent クラスは、 RoutingAgent トランスポート エージェントにハンドラーを実装する可能性がある次の表に示すイベントを提供します。
表 1. RoutingAgent クラスのイベント
イベント | 説明 |
---|---|
OnCategorizedMessage |
サーバーがコンテンツの変換を実行した後に発生します (コンテンツの変換が必要な場合)。 |
OnResolvedMessage |
メッセージのすべての受信者の解決後、ルーティングが決定する前に発生します。 |
OnRoutedMessage |
サーバーがメッセージを次ホップにルーティングし、必要に応じてコンテンツ変換を実行した後に発生します。 OnRoutedMessage イベント ハンドラーでコードを実行する前に、サーバーが必要なコンテンツ変換を実行し、メッセージのルート内の次ホップを決定するため、サーバーは OnRoutedMessage イベントの各メッセージを処理するために、OnSubmittedMessage イベントよりも多くのリソースを使用する場合があります。 |
OnSubmittedMessage |
メッセージが送信キューから取り出されたときに発生します。 RoutingAgent トランスポート エージェントがコンテンツ変換、解決された受信者、またはルーティング データを必要としない場合は、 OnSubmittedMessage イベントを使用します。 |
カスタム RoutingAgent トランスポート エージェントの作成
次に示す手順では、カスタムの RoutingAgent トランスポート エージェントを作成する方法について説明しています。
トランスポート エージェントを作成するには
名前空間に参照を追加します。
using Microsoft.Exchange.Data.Mime; using Microsoft.Exchange.Data.Transport; using Microsoft.Exchange.Data.Transport.Routing;
該当する名前空間は、Exchange サーバーで見つかります。 これらの名前空間への参照を追加することで、 RoutingAgent メンバーと 、Exchange 2013 で使用される他のクラスにアクセスできます。帯域幅ログ トランスポート エージェントの構築 サンプル。
RoutingAgentFactory クラスの派生クラスを実装します。
public class BandwidthLoggerFactory : RoutingAgentFactory { public override RoutingAgent CreateAgent(SmtpServer server) { return new BandwidthLogger(server); } }
このコードでは、派生クラスのインスタンスを作成し、CreateAgent メソッドをオーバーライドして、新しいカスタム エージェントのインスタンスを作成するようにします。 このクラスの別のメソッド (Close など) も、カスタム コードを実行するようにオーバーライドできます。
エージェントを定義します。
public class BandwidthLogger : RoutingAgent { // Your custom code goes here public BandwidthLogger(SmtpServer server) { Debug.WriteLine(logPrefix + "Agent constructor"); this.server = server; this.OnSubmittedMessage += SubmittedMessage; this.OnRoutedMessage += RoutedMessage; } }
独自のエージェント クラスを定義すると、カスタムの機能を追加できるようになります。 この例では、 OnSubmittedMessage と OnRoutedMessageの 2 つのイベントがカスタム イベント ハンドラーにリダイレクトされます。