Compartilhar via


Definindo o uso e as propriedades de estilo

O exemplo UseAndStyle demonstra como usar as propriedades Use e Style em XmlSerializerFormatAttribute e em DataContractFormatAttribute. Essas 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.

Observação

O procedimento de instalação e as instruções de compilação dessa amostra estão no final deste tópico.

A propriedade style 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 do WSDL de mensagens trocadas para uma operação contém parâmetros como se fosse uma chamada de procedimento remoto. A seguir, é mostrado 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 propriedade Use 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 exemplo document/literal a seguir.

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

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

<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 de Encoded, e você só deve usá-lo quando exigido pelos serviços herdados. O formato de mensagem Encoded 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 Registro de mensagem e rastreamento. A configuração de serviço e o código-fonte foram modificados para habilitar e utilizar o registro de mensagem e rastreamento. Além disso, WSHttpBinding foi configurado sem segurança, portanto, as mensagens registradas podem ser exibidas em um formato não criptografado. Os logs de rastreamento resultantes (System.ServiceModel.e2e e Message.log) devem ser exibidos usando a Ferramenta Visualizador de rastreamento de serviço (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 propriedade Use 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 configurações diferentes Use e Style, modifique-as no serviço, regenere o cliente, execute o exemplo e examine o arquivo c:\logs\message.logs com a ferramenta Visualizador de rastreamento de serviço. Observe também o impacto nos metadados exibindo http://localhost/ServiceModelSamples/service.svc?wsdl. Os metadados para serviços normalmente são divididos em várias páginas. A página principal do wsdl contém as associações WSDL, mas exibe http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 para observar as definições de mensagem.

Para configurar, compilar, e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Crie um diretório C:\LOGS para mensagens de registro em log. Forneça ao usuário permissões de gravação do Serviço de rede para este diretório.

  3. Para compilar a edição C# ou do Visual Basic .NET da solução, siga as instruções em Como compilar as amostras do Windows Communication Foundation.

  4. Para executar a amostra em uma configuração de computador único ou entre computadores, siga as instruções contidas em Como executar as amostras do Windows Communication Foundation.