Compartilhar via


<reliableSession>

Define a configuração para WS-Reliable Messaging. Quando esse elemento é adicionado a uma associação personalizada, o canal resultante pode dar suporte a garantias de entrega exatamente uma vez.

<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding>
          <reliableSession>

Syntax

<reliableSession acknowledgementInterval="TimeSpan"
                 flowControlEnabled="Boolean"
                 inactivityTimeout="TimeSpan"
                 maxPendingChannels="Integer"
                 maxRetryCount="Integer"
                 maxTransferWindowSize="Integer"
                 reliableMessagingVersion="Default/WSReliableMessagingFebruary2005/WSReliableMessaging11"
                 ordered="Boolean" />

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Descrição
acknowledgementInterval Um TimeSpan que contém o intervalo de tempo máximo que o canal aguardará para enviar uma confirmação para mensagens recebidas até esse ponto. O padrão é 00:00:0.2.
flowControlEnabled Um valor boleano que indica se o controle de fluxo avançado, uma implementação específica da Microsoft de controle de fluxo para mensagens WS-Reliable, é ativado. O padrão é true.
inactivityTimeout Um TimeSpan que especifica a duração máxima que o canal vai permitir que a outra parte da comunicação não envie nenhuma mensagem antes de indicar uma falha no canal. O padrão é 00:10:00.

A atividade em um canal é definida como recebimento de um aplicativo ou mensagens de infraestrutura. Essa propriedade controla a quantidade máxima de tempo para manter uma sessão inativa viva. Se o tempo mais longo for passado sem atividade, a sessão será anulada pela infraestrutura e pelas falhas de canal. Nota: Não é necessário que o aplicativo envie periodicamente mensagens para manter a conexão ativa.
maxPendingChannels Um inteiro que define o número máximo de canais que podem aguardar até o ouvinte ser aceito. Esse valor deve estar entre 1 e 16384. O padrão é 4.

Os canais estão pendentes quando estão esperando para serem aceitos. Depois que esse limite for atingido, nenhum canal será criado. Em vez disso, eles são colocados no modo pendente até que esse número seja reduzido (aceitando canais pendentes). Esse é um limite por fábrica.

Quando o limite é atingido e um aplicativo remoto tenta estabelecer uma nova sessão confiável, a solicitação é negada e a operação aberta que provocou essas falhas. Esse limite não se aplica ao número de canais de saída pendentes.
maxRetryCount Um inteiro que especifica o número máximo de vezes que um canal confiável tenta retransmitir uma mensagem para a qual não recebeu confirmação, chamando Send em seu canal subjacente.

Esse valor deve ser maior que zero. O padrão é 8.

Esse valor deve ser um inteiro maior que zero. Se uma confirmação não for recebida após a última retransmissão, o canal falhará.

Uma mensagem será considerada transferida se sua entrega no destinatário tiver sido reconhecida pelo destinatário.

Se uma confirmação não tiver sido recebida dentro de um determinado período de tempo para uma mensagem que foi transmitida, a infraestrutura retransmite automaticamente a mensagem. A infraestrutura tenta reenviar a mensagem pelo número máximo de vezes especificado por essa propriedade. Se uma confirmação não for recebida após a última retransmissão, o canal falhará.

A infraestrutura usa um algoritmo de retirada exponencial para determinar quando retransmitir, com base em um tempo médio de ida e volta calculado. O tempo inicialmente começa em 1 segundo antes da retransmissão e dobrando o atraso com cada tentativa, o que resulta em aproximadamente 8,5 minutos passando entre a primeira tentativa de transmissão e a última tentativa de retransmissão. O tempo para a primeira tentativa de retransmissão é ajustado de acordo com o tempo calculado de ida e volta e o período de tempo resultante que essas tentativas levam varia de acordo. Isso permite que o tempo de retransmissão se adapte dinamicamente a condições de rede variadas.
maxTransferWindowSize Um inteiro que especifica o tamanho máximo do buffer. Os valores válidos são de 1 a 4096.

No cliente, esse atributo define o tamanho máximo do buffer usado por um canal confiável para manter mensagens ainda não reconhecidas pelo receptor. A unidade da cota é uma mensagem. Se o buffer estiver cheio, outras operações SEND serão bloqueadas.

No receptor, esse atributo define o tamanho máximo do buffer usado pelo canal para armazenar mensagens de entrada ainda não enviadas para o aplicativo. Se o buffer estiver cheio, outras mensagens serão descartadas silenciosamente pelo receptor e exigirão retransmissão do cliente.
ordered Um booliano que especifica se as mensagens têm a garantia de chegar na ordem em que foram enviadas. Se essa configuração for false, as mensagens poderão chegar fora de ordem. O padrão é true.
reliableMessagingVersion Um valor válido de ReliableMessagingVersion que especifica a versão WS-ReliableMessaging a ser usada.

Elementos filho

Nenhum

Elementos pai

Elemento Descrição
<binding> Define todas as funcionalidades de associação da associação personalizada.

Comentários

Sessões confiáveis fornecem recursos para mensagens e sessões confiáveis. O sistema de mensagens confiáveis repete a comunicação com a falha e permite que garantias de entrega, como a chegada em ordem de mensagens, sejam especificadas. As sessões mantêm o estado dos clientes entre as chamadas. Esse elemento também fornece opcionalmente a entrega ordenada de mensagens. Esta sessão implementada pode atravessar SOAP e intermediários de transporte.

Cada elemento de associação representa uma etapa de processamento no envio ou no recebimento de mensagens. Em tempo de execução, os elementos de associação criam as fábricas de canais e os ouvintes necessários para criar pilhas de canais de saída e de entrada necessárias para enviar e receber mensagens. O reliableSession fornece uma camada opcional na pilha que pode estabelecer uma sessão confiável entre pontos de extremidade e configurar o comportamento desta sessão.

Para obter mais informações, confira Sessões confiáveis.

Exemplo

O exemplo a seguir demonstra como configurar uma associação personalizada com vários elementos de codificação de mensagens e transporte, especialmente habilitando sessões confiáveis, que mantém o estado do cliente e especifica garantias de entrega em ordem. Este recurso é configurado nos arquivos de configuração do aplicativo para o cliente e o serviço. O exemplo mostra a configuração do serviço.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Microsoft.ServiceModel.Samples.CalculatorService"
               behaviorConfiguration="CalculatorServiceBehavior">
        <!-- This endpoint is exposed at the base address provided by host: http://localhost/servicemodelsamples/service.svc -->
        <!-- specify customBinding binding and a binding configuration to use -->
        <endpoint address=""
                  binding="customBinding"
                  bindingConfiguration="Binding1"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- The mex endpoint is exposed at http://localhost/servicemodelsamples/service.svc/mex -->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <!-- custom binding configuration - configures HTTP transport, reliable sessions -->
    <bindings>
      <customBinding>
        <binding name="Binding1">
          <reliableSession />
          <security authenticationMode="SecureConversation"
                    requireSecurityContextCancellation="true">
          </security>
          <compositeDuplex />
          <oneWay />
          <textMessageEncoding messageVersion="Soap12WSAddressing10"
                               writeEncoding="utf-8" />
          <httpTransport authenticationScheme="Anonymous"
                         bypassProxyOnLocal="false"
                         hostNameComparisonMode="StrongWildcard"
                         proxyAuthenticationScheme="Anonymous"
                         realm=""
                         useDefaultWebProxy="true" />
        </binding>
      </customBinding>
    </bindings>
    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata httpGetEnabled="True" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Confira também