Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O exemplo RouteByBody demonstra como implementar um serviço que aceita objetos de mensagem com qualquer ação SOAP. Este exemplo baseia-se no Guia de 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 é hospedado no IIS.
Observação
O procedimento de instalação e as instruções de build 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 interno de expedição de mensagens do modelo de serviço do WCF (Windows Communication Foundation) é baseado em ações de mensagem. No entanto, há muitos serviços Web existentes que definem todas as suas operações com Action=". É impossível criar um serviço com base no WSDL que mantém a expedição de mensagens de solicitação com base nas informações de ação. Este exemplo demonstra um contrato de serviço baseado no WSDL (o WSDL está contido no Service.wsdl incluído no exemplo). O contrato de serviço é Calculadora, semelhante ao usado 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 expedição personalizado para permitir que as mensagens sejam enviadas entre operações. Esse comportamento de envio inicializa o seletor de operação personalizado DispatchByBodyElementOperationSelector com uma tabela dos nomes de operação inseridos pelo QName dos respectivos elementos wrapper.
DispatchByBodyElementOperationSelector examina a marca de início do primeiro filho do Corpo e seleciona a operação usando a tabela mencionada anteriormente.
O cliente usa um proxy gerado automaticamente do WSDL exportado pelo serviço usando a 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 as ações de todas as operações estarem vazias não afeta o código do cliente, exceto para os parâmetros de ação no proxy gerado automaticamente.
O código do cliente executa vários cálculos. Quando você executa o exemplo, as solicitações e respostas da operação 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
Verifique se você executou o Procedimento de instalação avulsa dos exemplos do Windows Communication Foundation.
Para compilar a solução, siga as instruções contidas em Como compilar as amostras do Windows Communication Foundation.
Para executar o exemplo em uma configuração única ou entre máquinas, siga as instruções em Executando os exemplos do Windows Communication Foundation.