Compartilhar via


Demonstra Passo a passo: Usando o transporte de mensagem WCF Exchange servidor

Você pode criar aplicativos que sejam baseiam o Windows Communication Foundation (WCF) Transporte de email do Exchange servidor para enviar e receber mensagens em especificado canais de entrada/saída, usando um computador que está executando Microsoft Exchange Server sistema autônomo mediador. Há suporte para aplicativos baseados em transporte de email do Exchange servidor WCF na área de trabalho e em dispositivos.

Esta explicação passo a passo apresenta os recursos do transporte de email do Exchange servidor do WCF.Ele ilustra as seguintes tarefas:

  • Configuração do computador.

  • Construção do aplicativo para o dispositivo (cliente).

  • Construção do aplicativo para a área de trabalho (servidor).

Para obter uma lista completa de código mostra esses procedimentos, consulte o Seção do exemplo no participante desta explicação passo a passo.

Observação:

Não use este exemplo no código de produção.

Pré-requisitos

Este exemplo requer o .NET Compact Framework versão 3.5.

Como configurar o computador

Neste procedimento, verifique se seu ambiente de desenvolvimento é conjunto até corretamente para executar o exemplo.

Para configurar seu computador para executar o exemplo

  1. Instalar o Windows Mobile versão 5.0 ou Windows Mobile 6 Software Development Kit (SDK).

    The Windows Mobile 6 Professional SDK inclui o recurso de sempre up-acumulado (AUTD) no ActiveSync, que é usado pelo transporte de email do dispositivo para manter o Caixa de entrada atualizado.Para obter mais informações, consulte o Windows Mobile Web site.

  2. Verifique se um servidor de email que está executando o Microsoft Exchange Server 2007 está disponível na rede.

    Se você não tiver Exchange Server 2007 disponível, você pode usar uma versão de teste que é executado no Virtual PC. Para obter mais informações, consulte o Exchange servidor Web site.

  3. Verificar se o seu computador pode se conectar ao novo servidor de email Exchange executando o Outlook Web acesso (OWA) do seu computador e conectar-se a uma conta de email.

  4. Certifique-se de que os serviços da Web do Exchange está ativado no servidor de email do Exchange.

    Uma maneira de verificar isso é acessar a página exchange.asmx no servidor de email usando uma das seguintes URLs: http://endereço do servidor/ews/exchange.asmx ou https://endereço do servidor / ews/exchange.asmx.

  5. Se você estiver usando o emulador, fornecer o emulador com recursos de rede.

    Observação:

    O ActiveSync AUTD -F- comer ure não é executado quando o ActiveSync pr é oviding a conexão de rede.Você pode u s e Emulador de dispositivo 2 .0 , que é incluído o Windows Mobile 6 Professional SDK ou sistema autônomo um baixar separado, para BIND sua placa NE2000 PCMCIA a um adaptador de rede do host, configurando propriedades de emulador.

  6. Quando você tem o emulador até e em execução, configurar o ActiveSync para se comunicar com seu servidor de email do Exchange.Para obter mais informações, consulte "etapa 5: Configurar e gerenciar o acesso a dispositivos móveis no Exchange servidor"emImplantando o Windows Mobile 6 dispositivos com o Microsoft Exchange servidor 2007 com no site da Microsoft TechNet.

Criando o aplicativo para o dispositivo

Neste procedimento, você cria um aplicativo para o dispositivo que representa o cliente e, em seguida, criar e enviar uma mensagem para o servidor usando o transporte de email.

Para criar o aplicativo para o dispositivo

  1. Criar um novo projeto dispositivo inteligente em Visual Studio. 

  2. Adicione as seguintes referências para o projeto:

    • Microsoft.ServiceModel.email.dll

    • Microsoft.ServiceModel.email.WindowsMobile.dll

    • sistema.ServiceModel.dll

    • sistema.tempo de execução.serialização.dll

  3. Adicionar o CFMessagingSerializer classe, que é descrito em Como: Serializar mensagens em aplicativos do WCF.

    Na área de trabalho, você pode usar um serializador personalizado ou atributos para criar dados serializados.No entanto, recomendamos que você use o mesmo serializador para o dispositivo e a área de trabalho.

  4. compilação a mensagem.

    Dim str As String = "Hello"
    
    String str = "Hello";
    
  5. criar a mensagem e serializá-lo.

    ' Create the message.
    Dim serializer As New 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. Crie variáveis para representar o nome de canal, o endereço de email do dispositivo e o endereço de email do servidor.

    Dim channelName As String = "StoreandFowardMessageHelloWorld"
    Dim serverAddress As String = "ServerMailAddress@fabrikam.com"
    Dim clientAddress As String = "DeviceMailAddress@fabrikam.com"
    
    string channelName = "StoreandFowardMessageHelloWorld";
    string serverAddress = "ServerMailAddress@fabrikam.com";
    string clientAddress = "DeviceMailAddress@fabrikam.com";
    
  7. compilação o canal de saída.

    ' Build the output channel.
    Dim binding As New WindowsMobileMailBinding()
    Dim parameters As New 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. Adicione código para enviar a mensagem.

    ' Send the message.
    outChannel.Send(m)
    
    // Send the message.
    outChannel.Send(m);
    
  9. Criar um ouvinte e adicione código para ouvir a resposta.

    Os blocos de ouvinte a execução do código.Portanto, recomendamos que você execute a escuta em um thread separado em seu código de produção.Neste exemplo, adicione o código do ouvinte após o código do remetente.

    ' 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. Quando é recebida uma resposta do servidor, desserializar a resposta e apresentar o resultado para o usuário.

    ' When you receive a response, deserialize the message.
    str = reply.GetBody(Of String)(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. Limpe.

    outChannel.Close()
    channelFactory.Close()
    
    listener.Close()
    inputChannel.Close()
    binding.Close()
    
    outChannel.Close();
    channelFactory.Close();
    
    listener.Close();
    inputChannel.Close();
    binding.Close();
    
  12. compilação o aplicativo cliente e implantá-lo no emulador ou dispositivo configurado para ser sincronizado com o servidor de email do Exchange.

Criando o aplicativo para a área de trabalho

Neste procedimento, você compilação um aplicativo para um computador área de trabalho, que representa o servidor neste exemplo.O servidor processa uma mensagem do cliente, acrescenta e envia de volta para o cliente.

Para criar o aplicativo para a área de trabalho

  1. criar um novo aplicativo de console do Windows.

  2. Adicione as seguintes referências para o projeto:

    • Microsoft.ServiceModel.email.dll

    • Microsoft.ServiceModel.Channels.email.ExchangeWebService.dll

    • sistema.ServiceModel.dll

    • sistema.tempo de execução.serialização.dll

  3. Adicionar o CFMessagingSerializer classe, que é descrito em Como: Serializar mensagens em aplicativos do WCF.

  4. criar Algumas variáveis, alguns dos quais devem corresponder aos valores do projeto de dispositivo.

    ' Set some global variables. 
    Dim channelName As String = "StoreandFowardMessageHelloWorld"
    Dim serverAddress As String = "ServerMailAddress@fabrikam.com"
    Dim serverPWD As String = "MyPassword"
    Dim clientAddress As String = "DeviceMailAddress@fabrikam.com"
    Dim exchangeServerLocation As String = "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. criar o ouvinte.

    Se você estiver usando sistema autônomo credenciais do Windows, passar um valor nulo sistema autônomo o segundo argumento para o ExchangeWebServiceMailBinding objeto. sistema autônomo no dispositivo, sistema autônomo blocos de entrada de canal execução do código.Portanto, recomendamos que você crie um novo thread para cada ouvinte no seu código de produção.

    ' 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 As New 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 As New CFMessagingSerializer(GetType(String))
    
    Dim str As String = ""
    str = reply.GetBody(Of String)(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. Adicione código para processar a mensagem.

    ' Process the message.
    str += ", World!"
    
    // Process the message.
    str += ", World!";
    
  7. Adicione código para enviar a resposta por meio de um canal de saída.

    ' 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. Limpe.

    ' 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. Construir o projeto e inicie o aplicativo do servidor.

  10. Inicie o aplicativo cliente no dispositivo ou emulador.

Exemplo

Descrição

Os exemplos de concluída a seguir demonstram como enviar e receber mensagens usando o transporte de email do Exchange servidor do WCF.

Concluída a listagem de código para o dispositivo (cliente)

        Dim str As String = "Hello"
        ' Create the message.
        Dim serializer As New CFMessagingSerializer(GetType(String))
        Dim m As Message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:test", str, serializer)
        Dim channelName As String = "StoreandFowardMessageHelloWorld"
        Dim serverAddress As String = "ServerMailAddress@fabrikam.com"
        Dim clientAddress As String = "DeviceMailAddress@fabrikam.com"
        ' Build the output channel.
        Dim binding As New WindowsMobileMailBinding()
        Dim parameters As New 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(Of String)(serializer)

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

        listener.Close()
        inputChannel.Close()
        binding.Close()
    End Sub
End Class
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();
}

Concluída a listagem de código para a área de trabalho (servidor)

        ' Set some global variables. 
        Dim channelName As String = "StoreandFowardMessageHelloWorld"
        Dim serverAddress As String = "ServerMailAddress@fabrikam.com"
        Dim serverPWD As String = "MyPassword"
        Dim clientAddress As String = "DeviceMailAddress@fabrikam.com"
        Dim exchangeServerLocation As String = "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 As New 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 As New CFMessagingSerializer(GetType(String))

        Dim str As String = ""
        str = reply.GetBody(Of String)(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()
    End Sub
End Class
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();
}

Compilando o código

O exemplo a ser executado no dispositivo requer referências aos namespaces seguintes:

O exemplo é executado na área de trabalho requer referências aos namespaces seguintes:

Segurança

Segurança de transporte de email não está habilitada neste exemplo.Para obter mais informações, consulte WCF transporte do Exchange servidor email.

Consulte também

Tarefas

Como: Usar segurança de mensagens com o WCF transporte do Exchange servidor email

Outros recursos

Desenvolvimento do Windows Communication Foundation (WCF) e o .NET Compact estrutura