Partilhar via


Percurso por Corpo

O exemplo RouteByBody demonstra como implementar um serviço que aceita objetos de mensagem com qualquer ação SOAP. Este exemplo é baseado na Introdução que implementa um serviço de calculadora. O serviço implementa uma única Calculate operação que aceita um Message parâmetro de solicitação e retorna uma Message resposta.

Neste exemplo, o cliente é um aplicativo de console (.exe) e o serviço está hospedado no IIS.

Nota

O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.

O exemplo demonstra o envio de mensagens com base no conteúdo do corpo. O mecanismo de envio de mensagens do modelo de serviço interno do Windows Communication Foundation (WCF) é baseado em Ações de mensagem. No entanto, existem muitos serviços Web existentes que definem todas as suas operações com Action="". É impossível criar um serviço baseado em WSDL que continue enviando mensagens de solicitação com base nas informações da Ação. Este exemplo demonstra um contrato de serviço baseado em WSDL (o WSDL está contido em Service.wsdl incluído no exemplo). O contrato de serviço é a Calculadora, semelhante à usada em Introdução. No entanto, o [OperationContract] especifica Action="" para todas as operações.

[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples"),
                 XmlSerializerFormat, DispatchByBodyBehavior]
    public interface ICalculator
    {
        [OperationContract(Action="")]
        double Add(double n1, double n2);
        [OperationContract(Action = "")]
        double Subtract(double n1, double n2);
        [OperationContract(Action = "")]
        double Multiply(double n1, double n2);
        [OperationContract(Action = "")]
        double Divide(double n1, double n2);
    }

Dado um contrato, um serviço requer um comportamento DispatchByBodyBehavior de despacho personalizado para permitir que as mensagens sejam despachadas entre operações. Esse comportamento de despacho inicializa o DispatchByBodyElementOperationSelector seletor de operação personalizado com uma tabela dos nomes de operação digitados pelo QName dos respetivos elementos de wrapper. DispatchByBodyElementOperationSelector olha para a etiqueta inicial do primeiro filho do Corpo e seleciona a operação usando a tabela mencionada anteriormente.

O cliente usa um proxy gerado automaticamente a partir do WSDL exportado pelo serviço usando ServiceModel Metadata Utility Tool (Svcutil.exe).

svcutil.exe  /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples /uxs http://localhost/servicemodelsamples/service.svc?wsdl /out:generatedProxy.cs

O fato de que as ações de todas as operações estão vazias não tem impacto no código do cliente, exceto para os parâmetros Action no proxy gerado automaticamente.

O código do cliente executa vários cálculos. Quando você executa o exemplo, as solicitações de operação e as respostas são exibidas na janela do console do cliente. Pressione ENTER na janela do cliente para desligar o cliente.

Add(100, 15.99) = 115.99
Subtract(145, 76.54) = 68.46
Multiply(9, 81.25) = 731.25
Divide(22, 7) = 3.14285714285714

Press <ENTER> to terminate client.

Para configurar, compilar e executar o exemplo

  1. Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Para criar a solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.

  3. Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.