Freigeben über


WCF Exchange Server-E-Mail-Übertragung

Aktualisiert: November 2007

Die Windows Communication Foundation (WCF)-E-Mail-Übertragung für Microsoft Exchange Server bietet einen Dienst mit einer Warteschlange, indem WCF-Endpunkte verwendet werden, die auf E-Mail-Adressen basieren. Mit dieser Lösung können .NET Compact Framework- und .NET Framework-Anwendungen Webdienste von jedem Computer aus hosten und verwenden, solange der E-Mail-Server erreichbar ist.

Hinweis:

WCF wird für .NET Compact Framework, Version 3.5 und höher, unterstützt.

Dieses Feature kann für eine Vielzahl von Anwendungsszenarien, einschließlich der folgenden, verwendet werden:

  • Anwendungen, die sichere Kommunikation von außerhalb des Unternehmens an den zentralen Server senden und vom Server sichere Kommunikation empfangen möchten.

  • Anwendungen, die Daten durch Pushvorgänge von einem Unternehmensserver an externe Geräte senden.

  • Peer-to-Peer-Anwendungen, bei denen zwei oder mehr Geräte direkt miteinander kommunizieren können.

    In diesen Szenarien übermitteln mehrere Parteien einander Statusinformationen und verwenden dabei den E-Mail-Server als Vermittler. Beispielsweise sendet ein Spieler in einem typischen Spieleszenario eine Einladung zum Spielen an die anderen Spieler, indem er der Anwendung die E-Mail-Adressen oder einen Gruppenalias zur Verfügung stellt.

  • Anwendungen, die verlorene Geräte suchen.

  • Anwendungen, die Konfigurationsinformationen für andere Anwendungen aktualisieren, indem sie Daten durch Pushvorgänge zum Gerät übermitteln.

Durch die WCF Exchange Server-E-Mail-Übertragung werden zwei grundlegende Einschränkungen von externen Geräten angesprochen: die Adressierbarkeit und die Möglichkeit, Daten in eine Warteschlange zu stellen, wenn Geräte offline sind. Der Kanalname und die E-Mail-Adresse bilden die WCF-Endpunktadresse. Dies entspricht einer IP-Adresse und einer Anschlussnummer in einer socketbasierten Anwendung. Die Adressierbarkeit des Geräts wird von der E-Mail-Adresse übernommen, und für die Addressierbarkeit der Anwendungsinstanz sorgt der Name des Eingabekanals. Dieses benutzerdefinierte Adressierungsschema wird mithilfe des WS-Adressierungsprotokolls implementiert.

Queuing wird durch den lokalen Datenspeicher in Windows Mobile-Geräten unterstützt. Allgemeine Informationen zu WCF-Warteschlangen finden Sie unter Warteschlangenübersicht.

Anwendungen, die auf der WCF Exchange Server-E-Mail-Übertragung aufbauen, profitieren von grundlegenden WCF-Features. WCF bietet ein einheitliches Programmiermodell für verschiedene zugrunde liegende Protokolle und Übertragungen. Zudem trennt es die Anwendungslogik vom WCF-Endpunkt. Dieses Programmiermodell bietet mehrere Vorteile, u. a. Unterstützung für verschiedene Netzwerke wie General Packet Radio Service (GPRS), Wi-Fi und alle anderen Netzwerke, über die auf den E-Mail-Server zugegriffen werden kann. Das Entwickeln von Anwendungen mit der WCF Exchange Server-E-Mail-Übertragung ist dem Entwickeln von Anwendungen mit WCF-Kanälen wie dem HTTP-Kanal sehr ähnlich.

Voraussetzungen

Exchange Server 2007 ist der E-Mail-Server für Anwendungen, die auf der WCF-E-Mail-Übertragung basieren. Exchange Server 2007 Service Pack 1 bietet eine Verwaltungsaufgabe, mit der Sie den Datenverkehr des Diensts in einen separaten Ordner für WCF-E-Mail umleiten können.

Hinweis:

Wenn der Datenverkehr des Diensts nicht umgeleitet wird, wird er in den Posteingang geleitet.

Die E-Mail-Übertragung wird auf beiden Geräten und auf Desktopcomputern unterstützt.

Die CE Messaging API (CEMAPI) muss auf dem Gerät installiert sein, damit Queuing unterstützt wird. Die CEMAPI ist auf Windows Mobile-Geräten vorhanden, jedoch nicht auf Windows Embedded CE-Geräten.

Die WCF Exchange Server-E-Mail-Übertragung wird auf Windows Mobile, Version 5.0, und höheren Versionen unterstützt. In früheren Windows Mobile-Versionen als Version 5.0 (Build 14847.2.0) wird anstelle des direkten Pushmodells Systems Management Server (SMS) verwendet, um die Synchronisierung mit dem Exchange-E-Mail-Server zu erzwingen.

Hinweis:

Die E-Mail-Übertragung wird zudem auf Windows Mobile 2003 für Pocket PC und Windows Mobile 2003 Second Edition für Pocket PC unterstützt. Auf Geräten, auf denen frühere Windows Mobile-Versionen als Version 5.0 ausgeführt werden, erfolgt die ActiveSync-Synchronisierung für eingehende Nachrichten nicht immer planmäßig. Es empfiehlt sich bei diesen Geräten, kein Timeout festzulegen oder für den Aufruf der Receive-Methode ein langes Timeout festzulegen. Windows Mobile 2003 für Smartphone wird nicht unterstützt.

  • Auf dem Desktopcomputer wird die Kommunikation mit dem Mailserver direkt über Exchange Server 2007-Webdienste ausgeführt. Der Desktop unterstützt kein Queuing. Daher muss der Desktopcomputer immer online sein.

  • Anwendungen auf dem Desktop verwenden die Desktopimplementierung von WCF.

Architektur

Die Messagingebene basiert auf der Standarddesktop-WCF-Architektur. Die Laufzeitebene des Diensts ist nicht vorhanden. In der folgenden Abbildung sind der Kanalstapel und die unterstützten Protokolle sowie Bindungselemente dargestellt.

Messagingebene für die WCF Exchange Server-E-Mail-Übertragung

Die Unterstützung für die WS-Sicherheit, Spezifikationsversion 1.0, umfasst SOAP-Nachrichtensicherheit mit X.509-Zertifikaten.

Die Message-Klasse stützt sich auf den WS-Adressierungsstandard. Alle Nachrichten sind asynchron, d. h., sie werden von einem Gerät über den E-Mail-Server an ein anderes Gerät, aber nicht zurück übermittelt.

Serialisierung und Deserialisierung von Nachrichten erfolgen innerhalb der .NET Compact Framework- oder der .NET Framework-Laufzeit. Auf der Geräteseite muss ein benutzerdefiniertes Serialisierungsprogramm in der Anwendung verwendet werden. Dies ist für den Desktop nicht erforderlich, da das vollständige .NET Framework die DataContractSerializer-Klasse unterstützt. Wenn die Anwendung die Kommunikation zwischen Geräten und Desktop unterstützt, sollte jedoch dasselbe Serialisierungsprogramm, das für Geräte genutzt wird, auch für den Desktop verwendet werden.

Entwurf

Für die WCF Exchange Server-E-Mail-Übertragung wird ein WCF-Endpunkt durch die Kombination einer WCF-Bindung und der Endpunktadresse dargestellt. Die Bindung gibt die für die Kommunikation verwendeten Parameter an. Sie stellt eine Sammlung von Bindungselementen dar, die u. a. ein Transportbindungselement, ein Codierungsbindungselement und ein Sicherheitsbindungselement einschließt. Diese Elemente sind für Anwendungen, die die E-Mail-Übertragung verwenden, wie folgt definiert:

Statt einen Satz Bindungselemente innerhalb eines CustomBinding-Objekts zu instanziieren, können Anwendungen mit einer vom MailBindingBase-Objekt abgeleiteten Klasse eine vordefinierte Sammlung von Bindungselementen erstellen. Neben dem Bindungselement für die E-Mail-Übertragung enthält diese Klasse ein Bindungselement für die Textcodierung und die optionale Nachrichtensicherheit.

Nachrichten sind im Text der E-Mail enthalten oder werden als Anlage gesendet. Die Betreffzeile der Nachricht enthält den Kanalnamen. Die Nachricht wird durch einen benutzerdefinierten WCF-E-Mail-Kanalstempel gekennzeichnet, der von der Nachrichtenklasse zur Verfügung gestellt wird, die von Exchange Server verwendet wird.

Senden von Nachrichten

Zum Senden einer Nachricht ruft eine Anwendung die Send-Methode im aktuellen Ausgabekanal auf, der offen sein muss. Der Ausgabekanal serialisiert die Nachricht zu einer Zeichenfolge und erstellt die Nachricht im Ordner Entwürfe. Er legt in den E-Mail-Feldern die entsprechenden Werte fest. Wenn die Nachricht erstellt wurde, wird sie in den Postausgang verschoben. Dieser Vorgang wird auf dem Gerät von der CEMAPI oder auf dem Desktop von Exchange-Webdienste ausgeführt. Auf dem Gerät werden Nachrichten im Postausgang mit anderen ausgehenden Nachrichten gemäß der Definition von ActiveSync synchronisiert.

Empfangen von Nachrichten

Wenn eine Anwendung, die auf der WCF Exchange Server-E-Mail-Übertragung basiert, eine Nachricht empfängt, finden die folgenden Vorgänge statt:

  1. Die Anwendung öffnet den Eingabekanal.

  2. Der Eingabekanal ruft die Receive-Methode auf und beginnt, Nachrichten zu überwachen.

  3. Wenn der Exchange-E-Mail-Server eine Nachricht mit einem WCF-E-Mail-Kanalstempel empfängt, wird die Nachricht automatisch in den Ordner Dienst-E-Mail weitergeleitet. Dieser Ordner befindet sich auf derselben Ebene wie der Posteingang.

    Hinweis:

    Falls der Exchange-E-Mail-Server noch nicht dafür konfiguriert wurde, die E-Mails des WCF Exchange Server-Diensts in den Ordner Dienst-E-Mail umzuleiten, dann wird stattdessen der Posteingang verwendet.

  4. Der Eingabekanal, der die neuen E-Mails überwacht, überprüft alle Nachrichten, die im Ordner Dienst-E-Mail oder Posteingang ankommen.

    Der Eingabekanal blockiert den Code, während er Nachrichten überwacht.

  5. Wenn der Eingabekanal den spezifischen Kanalnamen in der Nachricht zuordnen kann, ruft er die Nachricht ab und hebt die Blockierung des Codes auf.

Sie können die Receive-Methode für mehrere Eingabekanäle aufrufen, die mit der gleichen Übertragung erstellt wurden. Eine Blockierung erfolgt nur, wenn Receive zum zweiten Mal für denselben Eingabekanal des gleichen Threads aufgerufen wird.

Hinweis:

Jedem Kanallistener kann nur ein Eingabekanal zugeordnet werden. Ein zweiter Aufruf der AcceptChannel-Methode auf einem Kanallistener wird erst zurückgegeben, wenn der erste Eingabekanal geschlossen ist.

Zur Erhöhung der Flexibilität kann die E-Mail-Übertragung für die unterschiedliche Verarbeitung verschieden großer Nachrichten konfiguriert werden. Nachrichten können zum Beispiel auf der Grundlage ihrer Größe als Anlagen oder im Nachrichtentext gesendet werden. Größere Nachrichten werden möglicherweise während der Erstsynchronisierung nicht vollständig heruntergeladen. Auf dem Gerät werden Nachrichten im Ordner Dienst-E-Mail oder Posteingang mit anderen eingehenden Nachrichten synchronisiert, wie von Microsoft ActiveSync definiert.

Hinweis:

Die Microsoft ActiveSync-Einstellungen für die E-Mail-Synchronisierung steuern für das Gerät die maximale Größe der einzelnen Nachrichten, die zunächst auf das Gerät heruntergeladen werden. Wenn eine Nachricht diese Größe übersteigt, wird zunächst nur ein Teil des Nachrichtentexts heruntergeladen. Wenn eine Nachricht teilweise heruntergeladen wurde und ein Kanallistener auf die Nachricht wartet, markiert die Übertragung die Nachricht, damit sie vollständig heruntergeladen wird. Die vollständige Nachricht wird während der nächsten Synchronisierungssitzung heruntergeladen.

Beim Empfang einer Nachricht können Sie die E-Mail-Adresse des Absenders mithilfe der benutzerdefinierten FromEmailAddress-Eigenschaft in der Message-Klasse abrufen. Im folgenden Beispiel wird die Verwendung dieser Eigenschaft veranschaulicht.

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

Löschen von Nachrichten

Die Übertragung löscht eine Nachricht, sobald die Nachricht von der Anwendung angefordert und empfangen wurde. Der Vorgang zum Löschen eingehender Nachrichten nach ihrer Verarbeitung ist je nach Plattform unterschiedlich.

Der Vorgang zum Löschen eingehender Nachrichten über Windows Mobile-Geräte besteht aus den folgenden Schritten:

  1. Der Eingabekanal ruft eine Nachricht ab, nachdem er die Receive-Methode aufgerufen hat.

  2. Die E-Mail-Übertragung gibt einen Aufruf zum Löschen der Nachricht aus dem Nachrichtenspeicher des Windows Mobile-Geräts aus.

  3. Die Nachricht wird bei der nächsten E-Mail-Synchronisierung vom Server gelöscht.

Der Vorgang zum Löschen eingehender Nachrichten auf dem Desktop besteht aus den folgenden Schritten:

  1. Der Eingabekanal ruft eine Nachricht ab, nachdem er die Receive-Methode aufgerufen hat.

  2. Die E-Mail-Übertragung platziert die Nachricht im Cache für gelöschte Nachrichten. Hierbei handelt es sich um einen internen Cache, der zur E-Mail-Übertragung gehört.

  3. Beim nächsten Abfrageintervall überprüft die E-Mail-Übertragung den Cache für gelöschte Nachrichten.

    Das Abfrageintervall wird von der ServerQueryInterval-Eigenschaft bestimmt.

  4. Wenn der Cache für gelöschte Nachrichten Nachrichten enthält, gibt die E-Mail-Übertragung eine Abfrage mit einem Befehl zum Löschen der im Cache enthaltenden Nachrichten an den Server aus.

  5. Während der Abfrage überprüft die E-Mail-Übertragung die Serverereignisse und lädt alle zugeordneten Nachrichten herunter.

  6. Die E-Mail-Übertragung sendet heruntergeladene Nachrichten an den Verarbeitungscache zur Verarbeitung durch die Anwendung.

Für den Desktop gibt die E-Mail-Übertragung ebenfalls unter folgenden Umständen einen Befehl zum Löschen der im Cache für gelöschte Nachrichten enthaltenen Nachrichten an den Server:

  • Wenn Sie die Close-Methode für den letzten offenen Eingabekanal aufrufen, der einer E-Mail-Übertragung zugeordnet ist.

  • Wenn Sie die Dispose-Methode für die E-Mail-Übertragung aufrufen.

Diese Vorgänge werden synchron ausgeführt. Dabei blockieren Close und Dispose den Code, bis die Nachrichten vom Server gelöscht sind. Die zum Löschen der Nachrichten erforderliche Zeit kann unterschiedlich sein und hängt von der Anzahl der zu löschenden Nachrichten ab. Wenn während dieses Vorgangs ein Fehler auftritt, führt die Übertragung mehrere weitere Versuche zum Löschen der Nachrichten durch.

Auf Windows Mobile-Geräten wird diese Funktion vom Nachrichtenspeicher ausgeführt.

Nachrichten werden ebenfalls gelöscht, wenn sie ungültig oder fehlerhaft sind. Eine Nachricht, die einen beschädigten SOAP-Envelope aufweist, wird als ungültig angesehen und endgültig gelöscht. Wenn die Betreffzeile der Nachricht nach dem WCF-E-Mail-Stempel fehlerhafte Informationen enthält, beispielsweise ein nicht unterstütztes Zeichen im Kanalnamen, wird die Nachricht als fehlerhaft angesehen. Fehlerhafte Nachrichten werden in den Ordner Gelöschte Objekte verschoben.

Standardeinstellungen

Die MailBindingBase-Klasse und die Klassen, die davon abgeleitet werden, stellen eine Sammlung vordefinierter Bindungselemente dar. Diese Klassen sollen das Erstellen von Eingabe- und Ausgabekanälen vereinfachen. In einigen Szenarien müssen Sie möglicherweise Standardwerte in diesen vordefinierten Sammlungen ändern. Wenn die zu ändernde Eigenschaft in MailBindingBase oder in der von Ihnen verwendeten abgeleiteten Klasse nicht vorhanden ist, können Sie das Bindungselement in einem CustomBinding-Objekt separat erstellen. Alternativ können Sie die CreateBindingElements-Methode aufrufen, um alle in MailBindingBase enthaltenen Bindungselemente zurückzugeben.

In der ExchangeWebServiceMailBinding-Klasse beträgt die maximale Standardgröße für empfangene Nachrichten beispielsweise 65.536 Byte. Sie können die maximale Größe auf 100.000 Byte erhöhen, indem Sie die MaxReceivedMessageSize-Eigenschaft mit dem folgenden Code festlegen.

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

Sicherheit

In Anwendungen, die auf der WCF Exchange Server-E-Mail-Übertragung basieren, wird die auf dem WS-Sicherheitsprotokoll basierende SOAP-Nachrichtensicherheit unterstützt. Sie ähnelt den für die HttpTransportBindingElement -Klasse unterstützten Desktopsicherheitsfeatures. Dieses Sicherheitsfeature stützt sich auf X.509-Zertifikate.

Wenn Sie den vordefinierten Satz Bindungselemente in einer Unterklasse des MailBindingBase-Objekts verwenden, ist die Nachrichtensicherheit zwar verfügbar, aber standardmäßig deaktiviert. Verwenden Sie zum Aktivieren der Sicherheit die Mode-Eigenschaft. Sie können den Standardverschlüsselungsalgorithmus ändern, indem Sie die AlgorithmSuite-Eigenschaft verwenden. Wenn die Sicherheit aktiviert ist, ist Basic256Rsa15 der Standardwert.

SecurityBindingElement und AsymmetricSecurityBindingElement sind die Sicherheitsbindungselemente, die auf Anwendungen mit der WCF Exchange Server-E-Mail-Übertragung unterstützt werden.

Hinweis:

Die Verwendung von Nachrichtensicherheit erhöht die Größe der Nachrichten. Wenn Sie die ExchangeWebServiceMailBinding-Klasse verwenden und die Nachrichten 45.000 Byte überschreiten, müssen Sie ggf. den Wert für die MaxReceivedMessageSize-Eigenschaft erhöhen. Das Codebeispiel im vorangehenden Abschnitt veranschaulicht, wie die maximale Nachrichtengröße erhöht wird.

Bereitstellung

Die zur Gerätebereitstellung erforderlichen DLLs für die WCF Exchange Server-E-Mail-Übertragung sind in den .NET Compact Framework-CAB-Dateien für Windows Mobile-Geräte enthalten. Die verwalteten Assemblys werden im globalen Assemblycache installiert.

Nachfolgend sind die E-Mail-Übertragungs-DLLs für das Gerät aufgeführt:

  • Microsoft.ServiceModel.Channels.Mail.dll

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

  • Netcfmail3_5.dll, ein systemeigener CEMAPI-Wrapper

Die .NET Compact Framework-WCF-DLLs müssen ebenfalls auf dem Gerät vorhanden sein.

Die Desktopbereitstellung wird durch die MSI-Setupdatei von .NET Compact Framework vorgenommen. Das WCF Exchange Server-E-Mail-Übertragungsfeature ist standardmäßig installiert. Die E-Mail-Übertragungsassemblys werden im globalen Assemblycache des Desktops installiert.

Nachfolgend sind die WCF Exchange Server-E-Mail-Übertragungs-DLLs für den Desktop aufgeführt:

  • Microsoft.ServiceModel.Channels.Mail.dll

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

Die Standarddesktop-WCF-DLLs müssen ebenfalls auf dem Desktop vorhanden sein.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Verwenden der WCF Exchange Server-E-Mail-Übertragung

Weitere Ressourcen

Windows Communication Foundation (WCF)-Entwicklung und .NET Compact Framework