<reliableSession>

Define a definição para WS-Reliable Messaging. Quando este elemento é adicionado a um enlace personalizado, o canal resultante pode suportar garantias de entrega exatamente uma vez.

<configuração>
  <system.serviceModel>
    <enlaces>
      <customBinding>
        <enlace>
          <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 secções seguintes descrevem atributos, elementos subordinados e elementos principais.

Atributos

Atributo Descrição
acknowledgementInterval Uma TimeSpan que contém o intervalo de tempo máximo que o canal vai aguardar para enviar uma confirmação das mensagens recebidas até esse ponto. A predefinição é 00:00:0.2.
flowControlEnabled Um valor booleano que indica se o controlo de fluxo avançado, uma implementação específica da Microsoft do controlo de fluxo para WS-Reliable mensagens, está ativado. A predefinição é true.
inactivityTimeout Um TimeSpan que especifica a duração máxima que o canal vai permitir que a outra entidade de comunicação não envie mensagens, antes de falhar o canal. A predefinição é 00:10:00.

A atividade num canal é definida como recebendo uma aplicação ou mensagens de infraestrutura. Esta propriedade controla a quantidade máxima de tempo para manter viva uma sessão inativa. Se o tempo mais longo passar sem atividade, a sessão é abortada pela infraestrutura e as falhas do canal. Nota: Não é necessário que a aplicação envie periodicamente mensagens para manter a ligação viva.
maxPendingChannels Um número inteiro que especifica o número máximo de canais que podem aguardar que o serviço de escuta seja aceite. Este valor deve estar entre 1 e 16384 inclusive. A predefinição é 4.

Os canais estão pendentes quando estão à espera de serem aceites. Assim que esse limite for atingido, não são criados canais. Em vez disso, são colocados no modo pendente até este número ficar inativo (aceitando canais pendentes). Este é um limite por fábrica.

Quando o limiar é atingido e uma aplicação remota tenta estabelecer uma nova sessão fiável, o pedido é negado e a operação aberta que motivou estas falhas. Este limite não se aplica ao número de canais de envio pendentes.
maxRetryCount Um número inteiro que especifica o número máximo de vezes que um canal fiável tenta retransmitir uma mensagem para a qual não recebeu uma confirmação ao chamar Enviar no canal subjacente.

Este valor deve ser superior a zero. A predefinição é 8.

Este valor deve ser um número inteiro superior a zero. Se não for recebida uma confirmação após a última retransmissão, o canal falha.

Considera-se que uma mensagem é transferida se a sua entrega no destinatário tiver sido reconhecida pelo destinatário.

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

A infraestrutura utiliza um algoritmo de back-off exponencial para determinar quando repetir, com base numa média calculada de tempo de ida e volta. O tempo começa inicialmente a 1 segundo antes da retransmissão e duplica o atraso a cada tentativa, o que resulta na passagem de aproximadamente 8,5 minutos 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 demoram varia em conformidade. Isto permite que o tempo de retransmissão se adapte dinamicamente a diferentes condições de rede.
maxTransferWindowSize Um número inteiro que especifica o tamanho máximo da memória intermédia. Os valores válidos são de 1 a 4096 inclusive.

No cliente, este atributo define o tamanho máximo da memória intermédia utilizada por um canal fiável para manter as mensagens ainda não reconhecidas pelo recetor. A unidade da quota é uma mensagem. Se a memória intermédia estiver cheia, as operações SEND adicionais serão bloqueadas.

No recetor, este atributo define o tamanho máximo da memória intermédia utilizada pelo canal para armazenar mensagens recebidas ainda não enviadas para a aplicação. Se a memória intermédia estiver cheia, as mensagens adicionais são silenciosamente removidas pelo recetor e requerem a repetição do cliente.
ordenada Um valor booleano que especifica se é garantido que as mensagens chegam pela ordem em que foram enviadas. Se esta definição for false, as mensagens podem chegar fora de ordem. A predefinição é true.
reliableMessagingVersion Um valor válido a partir desse ReliableMessagingVersion valor especifica a versão WS-ReliableMessaging a ser utilizada.

Elementos Subordinados

Nenhuma

Elementos Principais

Elemento Descrição
<enlace> Define todas as capacidades de enlace do enlace personalizado.

Observações

As sessões fiáveis fornecem funcionalidades para mensagens e sessões fiáveis. A comunicação de mensagens fiáveis tenta a comunicação sobre a falha e permite que sejam especificadas garantias de entrega, como a chegada por ordem de mensagens. As sessões mantêm o estado dos clientes entre chamadas. Este elemento também fornece opcionalmente a entrega de mensagens ordenadas. Esta sessão implementada pode atravessar os intermediários SOAP e transport.

Cada elemento de enlace representa um passo de processamento ao enviar ou receber mensagens. No tempo de execução, os elementos de enlace criam as fábricas de canais e os serviços de escuta necessários para criar pilhas de canais de envio e receção necessárias para enviar e receber mensagens. O reliableSession fornece uma camada opcional na pilha que pode estabelecer uma sessão fiável entre pontos finais e configurar o comportamento desta sessão.

Para obter mais informações, veja Reliable Sessions (Sessões Fiáveis).

Exemplo

O exemplo seguinte demonstra como configurar um enlace personalizado com vários elementos de codificação de mensagens e transporte, especialmente ativando sessões fiáveis, que mantém o estado do cliente e especifica garantias de entrega por encomenda. Esta funcionalidade está configurada nos ficheiros de configuração da aplicação 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>

Ver também