WCF Exchange Server のメール トランスポート

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

Microsoft Exchange Server の Windows 通信基盤 (WCF)、メール トランスポートはキューに入れられたサービス電子メール アドレスに基づいて WCF エンドポイントを使用して提供します。 このソリューションで .NET Compact Framework および .NET Framework の両方のアプリケーションをホストおよび電子メール サーバーが到達可能な限り任意のコンピューターから Web サービスを使用します。

注意

WCF は .NET Compact Framework バージョン 3. 5 およびそれ以降でサポートされています。

この機能を使用して、さまざまなアプリケーション シナリオを以下を有効にできます。

  • フィールドからセキュリティで保護された通信を送信するアプリケーションは、中央サーバーにバックアップし、サーバーからセキュリティで保護された通信を受信します。

  • アプリケーションをエンタープライズ サーバーからのデータ フィールド内のデバイスにプッシュします。

  • 2 つ以上のデバイス通信できる互いに直接には、ピア ツー ピア アプリケーション。

    これらのシナリオで複数の当事者は、メディエイターとして、電子メール サーバーを使用して互いに状態情報を通信します。 たとえば、典型的なゲーム シナリオでは、1 人のプレイヤーが電子メール アドレスまたはグループの別名をアプリケーションを提供して、他のプレイヤーにゲームをプレイへの招待が送信されます。

  • 失われたデバイスを検索するアプリケーション。

  • アプリケーションをデバイスにデータをプッシュして他のアプリケーションの構成情報を更新します。

WCF の Exchange Server 電子メール トランスポート アドレス フィールドにデバイスの 2 つの基本的な制限。addressibility と、デバイスがオフラインのとき、キュー データする機能。 チャネル名と電子メール アドレスの WCF エンドポイントのアドレスを構成します。 これは、ソケット ベースのアプリケーション内の IP アドレスとポート番号に似ています。 デバイスの addressibility は、電子メール アドレスによって処理され入力チャネル名、アプリケーション インスタンスの addressibility が処理します。 Web サービス アドレス プロトコルはこのカスタム アドレス指定スキームを実装を使用します。

キューは、電源 Windows Mobile デバイスでローカル データ ストアで行えます。 WCF のキューについては、Queues Overview を参照してください。

WCF の Exchange Server 電子メールに構築されるアプリケーション トランスポート基本的な WCF 機能を活用します。 WCF のさまざまな基になるプロトコルおよびトランスポート、統一されたプログラミング モデルを提供し、WCF エンドポイントから、アプリケーション ロジックを分離します。 このプログラミング モデルは GPRS (全般パケット無線サービス)、Wi-Fi、および電子メール サーバーにアクセスできる他のネットワークなどの別のネットワークのサポートなど、いくつかの利点を提供します。 WCF の Exchange Server メール トランスポートを使用してアプリケーションの開発は、HTTP チャネルなどの WCF チャネルを使用してアプリケーションの開発に似ています。

必要条件

WCF メール トランスポートに基づくアプリケーションの電子メール サーバーが Exchange Server 2007 です。 別のフォルダー WCF 電子メール用にサービスのトラフィックをリダイレクトできる管理タスクを提供する Exchange Server 2007 Service Pack 1 します。

注意

サービスのトラフィックはリダイレクトされない場合 の受信トレイを使用します。

メール トランスポートは、デバイスのデスクトップ コンピューターの両方でサポートされます。

CE メッセージング API (CEMAPI) は、キューをサポートするデバイスに必要。 CEMAPI は電源 Windows Mobile デバイスで存在しますが電源 Windows Embedded CE デバイス上に存在しません。

Windows Mobile 5. 0 およびそれ以降のバージョン、WCF の Exchange Server のメール トランスポートをサポートします。 Windows Mobile のバージョンで以前のバージョン 5. 0 (ビルド 14847.2.0) で、Systems Management Server (SMS) を使用ダイレクト プッシュではなく、Exchange の電子メール サーバーと同期を強制します。

注意

メール トランスポートもでサポートされて Windows Mobile 2003 Pocket PC の Windows Mobile 2003 第 2 版 Pocket PC 用。ただし、5. 0 以前の Windows Mobile バージョン実行しているデバイスで受信したメッセージの ActiveSync 同期期間は、常に発生しませんスケジュールするとき。これらのデバイス、またはお勧めします、タイムアウトを指定しないこと Receive メソッドを呼び出すときは、大きなタイムアウトを指定すること。Smartphone の Windows Mobile 2003 はサポートされていません。

  • デスクトップ コンピューターでは、電子メール サーバーとの通信は Exchange Server 2007 の Web サービスを通して直接行われます。 デスクトップでは、キュー行いません。 その結果、デスクトップ コンピューターである常にことが必要オンライン。

  • デスクトップ上のアプリケーションは WCF のデスクトップ実装を使用します。

アーキテクチャ

メッセージングのレイヤーは、標準のデスクトップの WCF アーキテクチャに基づきます。 サービス ランタイム層が存在しません。 次に、チャネル スタックおよびサポートされるプロトコルとバインド要素を示します。

WCF の Exchange Server 電子メール トランスポートのメッセージング層

Exchange Server メール トランスポートのメッセージング層

WS-Security 仕様バージョン 1. 0 のサポートには、X.509 証明書を使用して SOAP メッセージのセキュリティが含まれます。

Message クラスは、Web サービスのアドレス指定の標準に作成されます。 すべてのメッセージは非同期;移動する、電子メール サーバー経由の 1 つのデバイスから、戻り値のトリップせず、別のデバイス。

シリアル化および逆シリアル化のメッセージは、.NET Compact Framework または .NET Framework ランタイム内で処理されます。 デバイス側では、カスタム シリアライザー、アプリケーションで使用する必要があります。 これは不要、デスクトップの DataContractSerializer クラスをサポートする .NET Framework のためです。 ただし、デバイスに使用される同じシリアライザーはデスクトップの場合に使用、アプリケーションがデバイスとデスクトップの間の通信をサポートします。

デザイン

WCF の Exchange Server のメール トランスポートを WCF エンドポイントでは、WCF バインドと、エンドポイントのアドレスの組み合わせによって表されます。 バインドは、通信に使用されるパラメーター指定します。 バインド要素、エンコーディング バインド要素、およびセキュリティ バインド要素のトランスポートを含むバインド要素のコレクションを表します。 メール トランスポートを使用するアプリケーション、これらの要素が定義とおりされます。

  • トランスポート バインド要素は、電子メール、トランスポート MailTransportBindingElementBase オブジェクトから派生したクラスのいずれかです。

  • エンコード バインド要素は、カスタム エンコーダーもサポートされますがエンコーディング、TextMessageEncodingBindingElement、オブジェクトによって表されるテキストです。

  • セキュリティ バインド要素は、Web サービス アドレスに基づいており AsymmetricSecurityBindingElement オブジェクトがあります。

CustomBinding オブジェクト内のバインド要素のセットをインスタンス化ではなくアプリケーションはバインド要素は、 MailBindingBase オブジェクトから派生するクラスを使用しての定義済みコレクションを作成できます。 に加えて、電子メール トランスポート バインドの要素はこのクラスに、テキストのエンコーディング バインド要素と省略可能なメッセージ セキュリティを含めます。

メッセージが電子メール メッセージの本文に含まれるか、添付ファイルとして送信。 の [件名のメッセージは、チャネル名前を含みます。 メッセージは、カスタム WCF 電子メール チャネル スタンプを持つ Exchange Server で使用するメッセージ クラスによって提供される識別されます。

メッセージの送信

アプリケーションは、メッセージを送信、開く必要があります現在の出力チャネル上で Send メソッドを呼び出してください。 出力チャネル メッセージ文字列をシリアル化し、[下書き] フォルダーで、メッセージを作成します。 電子メール フィールド内の適切な値を設定します。 メッセージが作成されたら、 の [送信トレイ] に移動されます。 これは、デバイス上の CEMAPI を使用するか、デスクトップ上の Exchange Web サービスを通じてまたは発生します。 の [送信トレイ] 内のメッセージはデバイスで、他の送信メッセージと同期される ActiveSync で定義されています。

メッセージの受信

WCF の Exchange Server 電子メール トランスポートに基づくアプリケーションが、メッセージを受信と、次処理が発生します。

  1. アプリケーションは、入力チャネルを開きます。

  2. メッセージの待機を開始する Receive メソッドを入力のチャネルに呼び出します。

  3. Exchange 電子メール サーバーは、WCF 電子メール チャネル スタンプがメッセージを受信、 の受信トレイと同じレベルにある サービス メール フォルダー] に、メッセージ ルーティング自動的にします。

    注意

    サービス電子メール フォルダーにでは、Exchange 電子メール サーバーをルート WCF Exchange Server サービスのメールに構成されていませんが場合、 の受信トレイを代わりに使用します。

  4. 入力チャンネルが、新しいメール イベントをリッスンしている、サービスの電子メールの 受信トレイに到着する各メッセージを調べます。

    入力チャネルは、メッセージのリッスン状態は中に、コードをブロックします。

  5. 入力チャネルは、メッセージに特定のチャネル名と一致、メッセージの取得し、コードのブロックを解除します。

同じトランスポートに組み込まれている複数の入力チャンネルの Receive メソッドを呼び出すことができます。 Receive は同じスレッドで同じ入力チャネル上で 2 回目に呼び出されます場合にのみ発生するブロックします。

注意

1 つだけの入力チャンネルは各チャネル リスナー関連付けることができます。チャネル リスナーで AcceptChannel メソッドへの 2 つ目の呼び出しは、最初の入力チャンネルが閉じるまで返されません。

柔軟性は、さまざまな方法でさまざまなサイズのメッセージを処理する電子メール トランスポートを構成できるあります。 たとえば、メッセージ サイズに基づいて、メッセージ本文または添付ファイルとして送信できます。 大きいメッセージが、初期同期中に完全にダウンロードできません。 サービスの電子メールの や 受信トレイのメッセージはデバイスで、他の着信メッセージと同期される Microsoft ActiveSync で定義されています。

注意

デバイスで、ActiveSync 電子メールの同期設定制御デバイスに最初にダウンロードされる各メッセージの最大サイズ。メッセージがこのサイズを超える場合、メッセージ本文の一部のみが最初にダウンロードされます。メッセージがダウンロード部分的にされ、チャネル リスナーは、メッセージを待って、トランスポート メッセージを完全にダウンロードすることを示すためにマークされます。次の同期セッションで、メッセージ全体がダウンロードされます。

メッセージの受信、時に、送信者の電子メール アドレス FromEmailAddress カスタム プロパティ、 Message クラスを使用して取得できます。 このプロパティの使用方法を次の例に示します。

System.ServiceModel.Channels.Message m;
String senderAddress;
m = input.Receive();
senderAddress = m.Properties.ContainsKey("FromEmailAddress")

メッセージの削除

トランスポートでは、メッセージは要求し、アプリケーションによって受信と、すぐメッセージを削除します。 処理された後に受信したメッセージを削除する手順は、プラットフォームによって異なります。

次の手順は、電源 Windows Mobile デバイスで受信したメッセージを削除するためのプロセスで構成されます。

  1. 入力、チャネルは Receive メソッドを呼び出してその後、メッセージを取得します。

  2. メール トランスポート問題の呼び出しを Windows Mobile 動力デバイス上のメッセージ ストアからメッセージを削除します。

  3. メッセージは、次の電子メールの同期でサーバーから削除されます。

次の手順は、デスクトップ上の受信メッセージを削除するためのプロセスで構成されます。

  1. 入力、チャネルは Receive メソッドを呼び出してその後、メッセージを取得します。

  2. メール トランスポート場所を内部キャッシュは、削除されたメッセージのキャッシュに、メッセージが、メール トランスポートを所有します。

  3. 次のクエリ間隔では、メール トランスポートは、削除されたメッセージ キャッシュをチェックします。

    クエリ間隔は、ServerQueryInterval プロパティによって決まります。

  4. 削除されたメッセージ キャッシュに、メッセージ、メール トランスポート、キャッシュ内のメッセージを削除するサーバーにコマンドを含むクエリ発行します。

  5. 中、クエリには、メール トランスポート サーバーのイベントをチェックし、関連するメッセージをダウンロードします。

  6. メール トランスポートでは、ダウンロードしたメッセージをその処理キャッシュ処理のためにアプリケーションによってポストします。

デスクトップのメール トランスポートはサーバーには次の状況下で、削除されたメッセージ キャッシュ内のメッセージ削除のコマンドも発行します。

  • とき Close メソッドを呼び出す、最後の残り開いて入力チャンネルでには、メール トランスポートを関連付け。

  • ときに、メール トランスポートに対して Dispose メソッドを呼び出します。

これらの操作は同期;CloseDispose は、メッセージは、サーバーから削除までに、コード ブロックします。 メッセージを削除に必要な時間は異なりますする削除する必要があるメッセージの数によって決まります。 障害がこの処理中に発生した場合、トランスポートはいくつかのメッセージを削除しようとして複数します。

電源 Windows Mobile デバイスでは、メッセージ ストアはこの関数を処理します。

メッセージは、無効または形式が間違っているときにも削除されます。 メッセージが破損している、SOAP エンベロープは無効と見なされは完全に削除されます。 メッセージの件名に、WCF 電子メール チャネル スタンプ、チャネル名に、サポートされていない文字としてなどの次不良の情報を不正なメッセージと見なされます。 間違った形式のメッセージは 削除 フォルダーに移動します。

既定の設定

MailBindingBase クラスとそれから派生したクラスの定義済みのバインド要素のコレクションを表します。 これらのクラスは、簡単に入力を作成およびチャネルを出力に設計されています。 状況によっては、これらの定義済みのコレクション内の既定値を変更ができます。 MailBindingBase またはを使用している派生クラスで変更する必要があるプロパティが存在しない場合、 CustomBinding オブジェクトに、バインド要素を個別に作成できます。 また、CreateBindingElements 内のすべてのバインド要素を取得する MailBindingBase メソッドを呼び出すこともできます。

たとえば、ExchangeWebServiceMailBinding クラスで受信したメッセージの既定のメッセージの最大サイズは 65, 536 バイトです。 MaxReceivedMessageSize プロパティを設定する次コードを使用して、最大サイズが 100, 000 バイトに増やせます。

binding = new ExchangeWebServiceMailBinding(Server, Credential, MailSecurityMode.Message);
bindingElems = binding.CreateBindingElements();
bindingElems.Find<ExchangeWebServiceMailTransportBindingElement>().MaxReceivedMessageSize = 100000;
binding = new CustomBinding(bindingElems);

セキュリティ

WCF の Exchange Server 電子メール トランスポートに基づくアプリケーションは、HttpTransportBindingElement クラスのサポートされているデスクトップのセキュリティ機能に似ている、Web サービス セキュリティ プロトコルに基づいた SOAP メッセージのセキュリティをサポートします。 このセキュリティ機能は、X.509 証明書によって依存します。

MailBindingBase オブジェクトのサブクラスでバインド要素の定義済みのセットを使用している場合メッセージのセキュリティは利用可能な既定では無効です。 セキュリティを有効にするには、Mode プロパティを使用します。 既定の暗号アルゴリズムは、AlgorithmSuite プロパティを使用して変更できます。 セキュリティを有効にすると、Basic256Rsa15 は既定値です。

SecurityBindingElementAsymmetricSecurityBindingElement を WCF の Exchange Server メール トランスポートを使用するアプリケーションでサポートされているセキュリティ バインド要素には。

注意

各メッセージのサイズを大きくメッセージ セキュリティを使用します。ExchangeWebServiceMailBinding クラスを使用して、メッセージ 45,000 バイトを超える場合、 MaxReceivedMessageSize プロパティの値を大きくができます。メッセージの最大サイズを増やすの方法を前のセクションで、コード例に示します。

配置

デバイスの展開、WCF の Exchange Server のメール トランスポート DLL は配信電源 Windows Mobile デバイスの .NET Compact Framework の CAB ファイルにされます。 マネージ アセンブリはグローバル アセンブリ キャッシュにインストールされます。

デバイスのメール トランスポート DLL 次のとおりです。

  • Microsoft.ServiceModel.Channels.Mail.dll

  • Microsoft.ServiceModel.Channels.Mail.WindowsMobile.dll

  • Netcfmail3_5.dll、CEMAPI のネイティブ ラッパーであります。

.NET Compact Framework WCF DLL は、デバイスに存在することも必要があります。

デスクトップの展開は、.NET Compact Framework .msi セットアップ ファイルによって処理されます。 WCF の Exchange Server 電子メール トランスポート機能は、既定でインストールです。 メール トランスポート アセンブリは、デスクトップのグローバル アセンブリ キャッシュにインストールされます。

WCF の Exchange Server メール トランスポート DLL、デスクトップの次のとおりです。

  • Microsoft.ServiceModel.Channels.Mail.dll

  • Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.dll

標準デスクトップ WCF DLL は、デスクトップに存在することも必要があります。

参照

処理手順

チュートリアル: WCF Exchange Server のメール トランスポートを使用します。

その他の技術情報

Windows 通信基盤 (WCF) の開発と、.NET Framework を最適化します。