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 トランスポート エージェントを作成する方法について説明しています。

トランスポート エージェントを作成するには

  1. 名前空間に参照を追加します。

       using Microsoft.Exchange.Data.Mime;
       using Microsoft.Exchange.Data.Transport;
       using Microsoft.Exchange.Data.Transport.Routing;
    
    

    該当する名前空間は、Exchange サーバーで見つかります。 これらの名前空間への参照を追加することで、 RoutingAgent メンバーと 、Exchange 2013 で使用される他のクラスにアクセスできます。帯域幅ログ トランスポート エージェントの構築 サンプル。

  2. RoutingAgentFactory クラスの派生クラスを実装します。

       public class BandwidthLoggerFactory : RoutingAgentFactory
       {
           public override RoutingAgent CreateAgent(SmtpServer server)
           {
               return new BandwidthLogger(server);
           }
       }
    
    

    このコードでは、派生クラスのインスタンスを作成し、CreateAgent メソッドをオーバーライドして、新しいカスタム エージェントのインスタンスを作成するようにします。 このクラスの別のメソッド (Close など) も、カスタム コードを実行するようにオーバーライドできます。

  3. エージェントを定義します。

       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;
           }
       }
    
    

    独自のエージェント クラスを定義すると、カスタムの機能を追加できるようになります。 この例では、 OnSubmittedMessageOnRoutedMessageの 2 つのイベントがカスタム イベント ハンドラーにリダイレクトされます。

関連項目