Definindo as propriedades de uso e estilo

O exemplo UseAndStyle demonstra como usar as propriedades Use e Style no XmlSerializerFormatAttribute e no DataContractFormatAttribute. Estas propriedades afetam a forma como as mensagens são formatadas. Por padrão, o corpo da mensagem é formatado com o estilo definido como Document. Essas configurações podem ser especificadas no nível do contrato de serviço ou no nível do contrato de operação.

Nota

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

A Style propriedade style determina como os metadados WSDL para o serviço são formatados. Os valores possíveis são Document, e Rpc. RPC significa que a representação WSDL de mensagens trocadas para uma operação contém parâmetros como se fosse uma chamada de procedimento remoto. A seguir encontra-se um exemplo.

<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
  <wsdl:part name="n1" type="xsd:double"/>
  <wsdl:part name="n2" type="xsd:double"/>
</wsdl:message>

Definir o estilo como Document significa que a representação WSDL contém um único elemento que representa o documento que é trocado por uma operação, conforme mostrado no exemplo a seguir.

<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
  <wsdl:part name="parameters" element="tns:Add"/>
</wsdl:message>

A Use propriedade determina o formato da mensagem. Os valores possíveis são Literal e Encoded; o valor padrão é Literal. Literal significa que a mensagem é uma instância literal do esquema no WSDL, conforme mostrado no seguinte exemplo Document/Literal.

<Add xmlns="http://Microsoft.ServiceModel.Samples">
  <n1>100</n1>
  <n2>15.99</n2>
</Add>

Codificado significa que os esquemas no WSDL são especificações abstratas que são codificadas de acordo com as regras encontradas na seção 5 do SOAP 1.1. Segue-se um exemplo de RPC/Encoded.

<q1:Add xmlns:q1="http://Microsoft.ServiceModel.Samples">
  <n1 xsi:type="xsd:double" xmlns="">100</n1>
  <n2 xsi:type="xsd:double" xmlns="">15.99</n2>
</q1:Add>

O WS-I Basic Profile 1.0 proíbe o uso e Encoded você só deve usá-lo quando exigido por serviços herdados. O Encoded formato de mensagem só está disponível ao usar o XmlSerializer.

Para permitir que você veja as mensagens que estão sendo enviadas e recebidas, este exemplo é baseado no Rastreamento e no Registro de Mensagens. A configuração do serviço e o código-fonte foram modificados para habilitar e utilizar o rastreamento e o registro de mensagens. Além disso, o WSHttpBinding foi configurado sem segurança, de modo que as mensagens registradas podem ser visualizadas em um formato não criptografado. Os logs de rastreamento resultantes (System.ServiceModel.e2e e Message.log) devem ser exibidos usando a ferramenta Service Trace Viewer Tool (SvcTraceViewer.exe). Os rastreamentos são configurados para serem criados na pasta C:\LOGS. Crie a pasta antes de executar o exemplo. Para exibir o conteúdo da mensagem na ferramenta Visualizador de Rastreamento, selecione Mensagens nos painéis esquerdo e direito da ferramenta.

O código a seguir mostra o contrato de serviço com a Use propriedade definida como OperationFormatUse e o formato do corpo da mensagem alterado do padrão OperationFormatStyle para Document.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"),
XmlSerializerFormat(Style = OperationFormatStyle.Rpc,
                                 Use = OperationFormatUse.Encoded)]
public interface IUseAndStyleCalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

Para ver a diferença entre as diferentes Use e Style as configurações, modifique-as no serviço, regenere o cliente, execute o exemplo e examine o arquivo c:\logs\message.logs com a ferramenta Service Trace Viewer. Observe também o impacto nos metadados visualizando http://localhost/ServiceModelSamples/service.svc?wsdl. Os metadados dos serviços são normalmente divididos em várias páginas. A página wsdl principal contém as ligações WSDL, mas modo de exibição http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 para observar as definições de mensagem.

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. Crie um diretório C:\LOGS para registrar mensagens. Conceda ao usuário permissões de gravação do Serviço de Rede para este diretório.

  3. Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.

  4. 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.