Exemplarische Vorgehensweise: Mithilfe von WCF Exchange Server-Mailtransport

Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]

Sie können Anwendungen erstellen, die auf Windows Communication Foundation (WCF) Exchange Server e-Mail-Transport senden und empfangen Nachrichten auf der angegebenen Eingabe/Ausgabe-Kanäle mithilfe eines Computers, das Microsoft Exchange Server als der Vermittler ausgeführt wird. Anwendungen, die auf WCF Exchange Server e-Mail-Übermittlungsdienst basieren werden auf dem Desktop und auf Geräten unterstützt.

Dieser exemplarischen Vorgehensweise werden die Features von WCF Exchange Server e-Mail-Übermittlungsdienst vorgestellt. Die folgenden Aufgaben veranschaulicht:

  • Einrichten des Computers.

  • Erstellen der Anwendung für das Gerät (Client).

  • Erstellen der Anwendung für den Desktop (Server).

Eine vollständige Liste der den in diesen Prozeduren gezeigten Code, finden Sie unter Beispiel Abschnitt am Ende dieser exemplarischen Vorgehensweise.

Hinweis

Verwenden Sie nicht in diesem Beispiel wird im Produktionscode.

Vorbereitungsmaßnahmen

Dieses Beispiel muss der .NET compact Framework Version 3.5.

Einrichten des Computers

In diesem Verfahren stellen Sie sicher, dass Ihre Entwicklungsumgebung korrekt zum Ausführen des Beispiels eingerichtet ist.

So richten Ihren Computer zum Ausführen des Beispiels

  1. Installieren Sie das Windows Mobile Version 5.0 oder Windows Mobile 6 Software Development Kit (SDK).

    Windows Mobile 6 Professional-SDK enthält das ActiveSync immer-Up-to-Date (AUTD) Feature, das von Mail-Transport auf dem Gerät verwendet wird, um der Posteingang auf dem neuesten Stand. Weitere Informationen finden Sie die Windows Mobile-Website .

  2. Stellen Sie sicher, dass eine e-Mail-Server mit Microsoft Exchange Server 2007 im Netzwerk verfügbar ist.

    Wenn Sie nicht Exchange Server 2007 verfügbar haben, können Sie eine Testversion, die auf dem virtuellen Computer ausgeführt wird. Weitere Informationen finden Sie die Exchange Server-Site .

  3. Überprüfen Sie, ob Ihr Computer eine Verbindung auf den neuen Exchange-e-Mail-Server herstellen kann indem Ausführen von Outlook Web Access (OWA) von Ihrem Computer und Verbinden mit einem e-Mail-Konto.

  4. Stellen Sie sicher, dass Exchange-Webdienste auf dem Exchange-e-Mail-Server aktiviert ist.

    Eine Möglichkeit, um dies zu überprüfen besteht darin, die exchange.asmx-Seite auf e-Mail-Server zugreifen, indem mithilfe eines der folgenden URLs: http:// Server-Adresse/ews/exchange.asmx oder "https://"Server-Adresse / ews/exchange.asmx.

  5. Wenn Sie den Emulator verwenden, bieten Sie den Emulator Netzwerkfunktionen.

    Hinweis

    Die ActiveSync AUTD-Funktion wird nicht ausgeführt, wenn ActiveSync die Netzwerkverbindung bereitstellt.Sie können Device Emulator 2.0 enthalten, mit der Windows Mobile 6 Professional-SDK oder als separater Download verwenden, um Ihre NE2000 PCMCIA-Karte an ein Host-Netzwerkadapter zu binden, indem Emulatoreigenschaften konfigurieren.

  6. Wenn Sie enthalten den Emulator und ActiveSync zur Kommunikation mit Ihrem Exchange-e-Mail-Server ausgeführt wird, konfigurieren. Weitere Informationen finden Sie unter "Schritt 5: Konfigurieren Sie und Verwalten des mobilen Zugriffs von Geräten auf dem Exchange Server "bereitstellen Windows Mobile 6-basierte Geräte mit Microsoft Exchange Server 2007 auf der Microsoft TechNet-Website.

Erstellen der Anwendung für das Gerät

In diesem Verfahren Sie erstellen eine Anwendung für das Gerät, das den Client darstellt und dann erstellen und senden eine Nachricht an den Server mithilfe von Mail-Transport.

Um die Anwendung für das Gerät zu erstellen

  1. Erstellen Sie ein neues Smart Device-Projekt in Visual Studio. 

  2. Fügen Sie die folgenden Verweise zum Projekt hinzu:

    • Microsoft.ServiceModel.Mail.dll

    • Microsoft.ServiceModel.Mail.WindowsMobile.dll

    • System.ServiceModel.dll

    • System.Runtime.Serialization.dll

  3. Fügen Sie die CFMessagingSerializer -Klasse, die in SO WIRD'S GEMACHT: Serialisieren von Meldungen in WCF-Anwendungen beschrieben wird.

    Auf dem Desktop können ein benutzerdefiniertes Serialisierungsprogramm oder Attribute Sie zum Erstellen von serialisierten Daten. Wir empfehlen jedoch, dass Sie das gleiche Serialisierungsprogramm für das Gerät und dem Desktop verwenden.

  4. Erstellen Sie die Nachricht.

                                  Dim str AsString = "Hello"
    
    String str = "Hello";
    
  5. Erstellen Sie die Nachricht, und serialisiert.

                                  ' Create the message.
                                  Dim serializer AsNew CFMessagingSerializer(GetType(String))
    Dim m As Message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer)
    
                                  // Create the message.
    CFMessagingSerializer serializer = new CFMessagingSerializer(typeof(string));
    Message m = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer);
    
  6. Erstellen Sie Variablen zur Darstellung von dem Namen des Kanals, die e-Mail-Adresse des Geräts und die e-Mail-Adresse des Servers.

                                  Dim channelName AsString = "StoreandFowardMessageHelloWorld"Dim serverAddress AsString = "ServerMailAddress@fabrikam.com"Dim clientAddress AsString = "DeviceMailAddress@fabrikam.com"
    
                                  string channelName = "StoreandFowardMessageHelloWorld";
    string serverAddress = "ServerMailAddress@fabrikam.com";
    string clientAddress = "DeviceMailAddress@fabrikam.com";
    
  7. Erstellen Sie den Ausgabekanal.

                                  ' Build the output channel.
                                  Dim binding AsNew WindowsMobileMailBinding()
    Dim parameters AsNew BindingParameterCollection()
    
    Dim channelFactory As IChannelFactory(Of IOutputChannel)
    channelFactory = binding.BuildChannelFactory(Of IOutputChannel)(parameters)
    channelFactory.Open()
    
    Dim outChannel As IOutputChannel = channelFactory.CreateChannel(New EndpointAddress(MailUriHelper.Create(channelName, serverAddress)))
    outChannel.Open()
    
                                  // Build the output channel.
    WindowsMobileMailBinding binding = new WindowsMobileMailBinding();
    BindingParameterCollection parameters = new BindingParameterCollection();
    
    IChannelFactory<IOutputChannel> channelFactory = binding.BuildChannelFactory<IOutputChannel>(parameters);
    channelFactory.Open();
    
    IOutputChannel outChannel = channelFactory.CreateChannel(new EndpointAddress(MailUriHelper.Create(channelName,serverAddress)));
    outChannel.Open();
    
  8. Fügen Sie Code zum Senden der Nachricht.

                                  ' Send the message.
    outChannel.Send(m)
    
                                  // Send the message.
    outChannel.Send(m);
    
  9. Erstellen Sie einen Listener und fügen Sie Code zum Überwachen der Antwort.

    Der Listener blockiert die Codeausführung. Daher empfiehlt es sich, dass den Listener in einem separaten Thread im Produktionscode auszuführen. In diesem Beispiel fügen Sie den Listener-Code nach dem Absender-Code.

                                  ' Listen for the response.         
                                  Dim listener As IChannelListener(Of IInputChannel)
    listener = binding.BuildChannelListener(Of IInputChannel)(MailUriHelper.CreateUri(channelName, clientAddress))
    
    listener.Open()
    
    Dim inputChannel As IInputChannel = listener.AcceptChannel()
    inputChannel.Open()
    
    Dim reply As Message = inputChannel.Receive()
    
                                  // Listen for the response.         
    IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(MailUriHelper.CreateUri(channelName,clientAddress),parameters);
    listener.Open();
    
    IInputChannel inputChannel = listener.AcceptChannel();
    inputChannel.Open();
    
    Message reply = inputChannel.Receive();
    
  10. Wenn eine Antwort vom Server empfangen wird, deserialisiert der Antwort, und stellen das Ergebnis an dem Benutzer.

                                  ' When you receive a response, deserialize the message.
    str = reply.GetBody(OfString)(serializer)
    
    MessageBox.Show(str, "Received message")
    
                                  // When you receive a response, deserialize the message.
    str = reply.GetBody<string>(serializer);
    
    MessageBox.Show(str, "Received message");
    
  11. Bereinigen.

    outChannel.Close()
    channelFactory.Close()
    
    listener.Close()
    inputChannel.Close()
    binding.Close()
    
    outChannel.Close();
    channelFactory.Close();
    
    listener.Close();
    inputChannel.Close();
    binding.Close();
    
  12. Erstellen Sie die Client-Anwendung und Bereitstellen Sie es des Emulators oder Gerät, das Sie für die Synchronisierung mit dem Exchange-e-Mail-Server konfiguriert.

Erstellen der Anwendung für den Desktop

In diesem Verfahren erstellen Sie eine Anwendung für einen Desktopcomputer, der in diesem Beispiel Server darstellt. Der Server eine Nachricht vom Client verarbeitet, fügt es und sendet es zurück an den Client.

Um die Anwendung für den Desktop zu erstellen

  1. Erstellen Sie eine neue Windows-Konsolenanwendung.

  2. Fügen Sie die folgenden Verweise zum Projekt hinzu:

    • Microsoft.ServiceModel.Mail.dll

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

    • System.ServiceModel.dll

    • System.Runtime.Serialization.dll

  3. Fügen Sie die CFMessagingSerializer -Klasse, die in SO WIRD'S GEMACHT: Serialisieren von Meldungen in WCF-Anwendungen beschrieben wird.

  4. Erstellen Sie einige Variablen, von die einige Werte aus dem Geräteprojekt entsprechen muss.

                                  ' Set some global variables. 
                                  Dim channelName AsString = "StoreandFowardMessageHelloWorld"Dim serverAddress AsString = "ServerMailAddress@fabrikam.com"Dim serverPWD AsString = "MyPassword"Dim clientAddress AsString = "DeviceMailAddress@fabrikam.com"Dim exchangeServerLocation AsString = "http://fabrikam"
    
                                  // Set some global variables. 
                                  string channelName = "StoreandFowardMessageHelloWorld";
    string serverAddress = "ServerMailAddress@fabrikam.com";
    string serverPWD = "MyPassword";
    string clientAddress = "DeviceMailAddress@fabrikam.com";
    string exchangeServerLocation = "http://fabrikam";
    
  5. Erstellen Sie den Listener.

    Wenn Sie Windows-Anmeldeinformationen verwenden, übergeben Sie einen null Wert als zweites Argument, das ExchangeWebServiceMailBinding-Objekt. Wie auf dem Gerät Codeausführung die Blöcke Eingangskanal. Daher wird empfohlen, dass Sie einen neuen Thread für jeden Listener im Produktionscode erstellen.

                                  ' Create the listener. If you are using Windows credentials,
                                  ' pass a null value as the second argument to the ExchangeWebServiceMailBinding.
                                  Dim binding As MailBindingBase
    binding = New ExchangeWebServiceMailBinding(New Uri(exchangeServerLocation), New System.Net.NetworkCredential(serverAddress, serverPWD))
    Dim parameters AsNew BindingParameterCollection()
    
    Dim listener As IChannelListener(Of IInputChannel)
    listener = binding.BuildChannelListener(Of IInputChannel)(MailUriHelper.CreateUri(channelName, serverAddress))
    
    listener.Open()
    
    Dim inputChannel As IInputChannel = listener.AcceptChannel()
    inputChannel.Open()
    
    Dim reply As Message = inputChannel.Receive()
    
    Dim serializer AsNew CFMessagingSerializer(GetType(String))
    
    Dim str AsString = ""
    str = reply.GetBody(OfString)(serializer)
    
                                  // Create the listener. If you are using Windows credentials,
                                  // pass a null value as the second argument to the ExchangeWebServiceMailBinding.
    MailBindingBase binding = new ExchangeWebServiceMailBinding(new Uri(exchangeServerLocation),
        new System.Net.NetworkCredential(serverAddress, serverPWD));
    BindingParameterCollection parameters = new BindingParameterCollection();
    
    IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>
        (MailUriHelper.CreateUri(channelName, serverAddress), parameters);
    listener.Open();
    
    IInputChannel inputChannel = listener.AcceptChannel();
    inputChannel.Open();
    
    Message reply = inputChannel.Receive();
    
    CFMessagingSerializer serializer = new CFMessagingSerializer(typeof(string));
    
    string str = "";
    str = reply.GetBody<string>(serializer);
    
  6. Fügen Sie Code zum Verarbeiten der Nachricht.

                                  ' Process the message.
    str += ", World!"
    
                                  // Process the message.
    str += ", World!";
    
  7. Fügen Code hinzu, um die Antwort über einen Ausgabekanal senden.

                                  ' Send the response through an output channel.
                                  Dim m As Message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer)
    
    Dim channelFactory As IChannelFactory(Of IOutputChannel)
    channelFactory = binding.BuildChannelFactory(Of IOutputChannel)(parameters)
    
    channelFactory.Open()
    
    Dim outChannel As IOutputChannel = channelFactory.CreateChannel(New EndpointAddress(MailUriHelper.CreateUri(channelName, clientAddress)))
    outChannel.Open()
    
    outChannel.Send(m)
    
                                  // Send the response through an output channel.
    Message m = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer);
    
    IChannelFactory<IOutputChannel> channelFactory = binding.BuildChannelFactory<IOutputChannel>(parameters);
    
    channelFactory.Open();
    
    IOutputChannel outChannel = channelFactory.CreateChannel(new EndpointAddress(
        MailUriHelper.CreateUri(channelName, clientAddress)));
    outChannel.Open();
    
    outChannel.Send(m);
    
  8. Bereinigen.

                                  ' Clean up.
    outChannel.Close()
    channelFactory.Close()
    
    listener.Close()
    inputChannel.Close()
    binding.Close()
    
                                  // Clean up.
    outChannel.Close();
    channelFactory.Close();
    
    listener.Close();
    inputChannel.Close();
    binding.Close();
    
  9. Erstellen Sie das Projekt, und Starten der Serveranwendung.

  10. Starten Sie die Client-Anwendung auf den Emulator oder das Gerät.

Beispiel

Beschreibung

Die folgenden vollständige Beispiele veranschaulichen, wie senden und Empfangen von Nachrichten mithilfe von WCF Exchange Server e-Mail-Übermittlungsdienst.

Führen Sie Code-Auflistung für das Gerät (Client)

                          Dim str AsString = "Hello"        ' Create the message.Dim serializer AsNew CFMessagingSerializer(GetType(String))
        Dim m As Message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer)
        Dim channelName AsString = "StoreandFowardMessageHelloWorld"Dim serverAddress AsString = "ServerMailAddress@fabrikam.com"Dim clientAddress AsString = "DeviceMailAddress@fabrikam.com"        ' Build the output channel.Dim binding AsNew WindowsMobileMailBinding()
        Dim parameters AsNew BindingParameterCollection()

        Dim channelFactory As IChannelFactory(Of IOutputChannel)
        channelFactory = binding.BuildChannelFactory(Of IOutputChannel)(parameters)
        channelFactory.Open()

        Dim outChannel As IOutputChannel = channelFactory.CreateChannel(New EndpointAddress(MailUriHelper.Create(channelName, serverAddress)))
        outChannel.Open()
        ' Send the message.
        outChannel.Send(m)
        ' Listen for the response.         Dim listener As IChannelListener(Of IInputChannel)
        listener = binding.BuildChannelListener(Of IInputChannel)(MailUriHelper.CreateUri(channelName, clientAddress))

        listener.Open()

        Dim inputChannel As IInputChannel = listener.AcceptChannel()
        inputChannel.Open()

        Dim reply As Message = inputChannel.Receive()
        ' When you receive a response, deserialize the message.
        str = reply.GetBody(OfString)(serializer)

        MessageBox.Show(str, "Received message")
        outChannel.Close()
        channelFactory.Close()

        listener.Close()
        inputChannel.Close()
        binding.Close()
    EndSubEndClass
                          static
                          void Main()
{
    String str = "Hello";
    // Create the message.
    CFMessagingSerializer serializer = new CFMessagingSerializer(typeof(string));
    Message m = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer);
    string channelName = "StoreandFowardMessageHelloWorld";
    string serverAddress = "ServerMailAddress@fabrikam.com";
    string clientAddress = "DeviceMailAddress@fabrikam.com";
    // Build the output channel.
    WindowsMobileMailBinding binding = new WindowsMobileMailBinding();
    BindingParameterCollection parameters = new BindingParameterCollection();

    IChannelFactory<IOutputChannel> channelFactory = binding.BuildChannelFactory<IOutputChannel>(parameters);
    channelFactory.Open();

    IOutputChannel outChannel = channelFactory.CreateChannel(new EndpointAddress(MailUriHelper.Create(channelName,serverAddress)));
    outChannel.Open();
    // Send the message.
    outChannel.Send(m);
    // Listen for the response.         
    IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>(MailUriHelper.CreateUri(channelName,clientAddress),parameters);
    listener.Open();

    IInputChannel inputChannel = listener.AcceptChannel();
    inputChannel.Open();

    Message reply = inputChannel.Receive();
    // When you receive a response, deserialize the message.
    str = reply.GetBody<string>(serializer);

    MessageBox.Show(str, "Received message");
    outChannel.Close();
    channelFactory.Close();

    listener.Close();
    inputChannel.Close();
    binding.Close();
}

Führen Sie Code auflisten für den Desktop (Server)

                                  ' Set some global variables. 
                          Dim channelName AsString = "StoreandFowardMessageHelloWorld"Dim serverAddress AsString = "ServerMailAddress@fabrikam.com"Dim serverPWD AsString = "MyPassword"Dim clientAddress AsString = "DeviceMailAddress@fabrikam.com"Dim exchangeServerLocation AsString = "http://fabrikam"        ' Create the listener. If you are using Windows credentials,        ' pass a null value as the second argument to the ExchangeWebServiceMailBinding.Dim binding As MailBindingBase
        binding = New ExchangeWebServiceMailBinding(New Uri(exchangeServerLocation), New System.Net.NetworkCredential(serverAddress, serverPWD))
        Dim parameters AsNew BindingParameterCollection()

        Dim listener As IChannelListener(Of IInputChannel)
        listener = binding.BuildChannelListener(Of IInputChannel)(MailUriHelper.CreateUri(channelName, serverAddress))

        listener.Open()

        Dim inputChannel As IInputChannel = listener.AcceptChannel()
        inputChannel.Open()

        Dim reply As Message = inputChannel.Receive()

        Dim serializer AsNew CFMessagingSerializer(GetType(String))

        Dim str AsString = ""
        str = reply.GetBody(OfString)(serializer)
        ' Process the message.
        str += ", World!"        ' Send the response through an output channel.Dim m As Message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer)

        Dim channelFactory As IChannelFactory(Of IOutputChannel)
        channelFactory = binding.BuildChannelFactory(Of IOutputChannel)(parameters)

        channelFactory.Open()

        Dim outChannel As IOutputChannel = channelFactory.CreateChannel(New EndpointAddress(MailUriHelper.CreateUri(channelName, clientAddress)))
        outChannel.Open()

        outChannel.Send(m)
        ' Clean up.
        outChannel.Close()
        channelFactory.Close()

        listener.Close()
        inputChannel.Close()
        binding.Close()
    EndSubEndClass
                          static
                          void Main()
{
    // Set some global variables. string channelName = "StoreandFowardMessageHelloWorld";
    string serverAddress = "ServerMailAddress@fabrikam.com";
    string serverPWD = "MyPassword";
    string clientAddress = "DeviceMailAddress@fabrikam.com";
    string exchangeServerLocation = "http://fabrikam";
    // Create the listener. If you are using Windows credentials,// pass a null value as the second argument to the ExchangeWebServiceMailBinding.
    MailBindingBase binding = new ExchangeWebServiceMailBinding(new Uri(exchangeServerLocation),
        new System.Net.NetworkCredential(serverAddress, serverPWD));
    BindingParameterCollection parameters = new BindingParameterCollection();

    IChannelListener<IInputChannel> listener = binding.BuildChannelListener<IInputChannel>
        (MailUriHelper.CreateUri(channelName, serverAddress), parameters);
    listener.Open();

    IInputChannel inputChannel = listener.AcceptChannel();
    inputChannel.Open();

    Message reply = inputChannel.Receive();

    CFMessagingSerializer serializer = new CFMessagingSerializer(typeof(string));

    string str = "";
    str = reply.GetBody<string>(serializer);
    // Process the message.
    str += ", World!";
    // Send the response through an output channel.
    Message m = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer);

    IChannelFactory<IOutputChannel> channelFactory = binding.BuildChannelFactory<IOutputChannel>(parameters);

    channelFactory.Open();

    IOutputChannel outChannel = channelFactory.CreateChannel(new EndpointAddress(
        MailUriHelper.CreateUri(channelName, clientAddress)));
    outChannel.Open();

    outChannel.Send(m);
    // Clean up.
    outChannel.Close();
    channelFactory.Close();

    listener.Close();
    inputChannel.Close();
    binding.Close();
}

Kompilieren des Codes

Das Beispiel, das auf dem Gerät ausgeführt wird sind Verweise auf die folgenden Namespaces erforderlich:

Das Beispiel, das auf dem Desktop ausgeführt wird sind Verweise auf die folgenden Namespaces erforderlich:

Sicherheit

Mail-Transport-Sicherheit ist in diesem Beispiel nicht aktiviert. Weitere Informationen finden Sie unter WCF Exchange Server E-Mail-Transport.

Siehe auch

Aufgaben

SO WIRD'S GEMACHT: Verwenden Sie Nachrichtensicherheit mit WCF Exchange Server-Mailtransport

Weitere Ressourcen

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