Partilhar via


Reliable Messaging Protocol versão 1.1

Este tópico aborda os detalhes da implementação do Windows Communication Foundation (WCF) para o protocolo WS-ReliableMessaging de fevereiro de 2007 (versão 1.1) necessário para a interoperação usando o transporte HTTP. O WCF segue a especificação WS-ReliableMessaging com as restrições e esclarecimentos explicados neste tópico. Observe que o protocolo WS-ReliableMessaging versão 1.1 é implementado a partir do .NET Framework 3.5.

O protocolo WS-ReliableMessaging de fevereiro de 2007 é implementado no WCF pelo ReliableSessionBindingElement.

Por conveniência, o tópico usa as seguintes funções:

  • Iniciador: o cliente que inicia a criação da sequência WS-Reliable Message.

  • Respondente: O serviço que recebe as solicitações do iniciador.

Este documento usa os prefixos e namespaces na tabela a seguir.

Prefixo Espaço de Nomes
WSRM http://docs.oasis-open.org/ws-rx/wsrm/200702
NetRM http://schemas.microsoft.com/ws/2006/05/rm
s http://www.w3.org/2003/05/soap-envelope
WSA http://schemas.xmlsoap.org/ws/2005/08/addressing
WSSE http://docs.oasis-open.org/wss/2004/01/oasis-200401-wssecurity-secext-1.0.xsd
WSRMP http://docs.oasis-open.org/ws-rx/wsrmp/200702
NetRMP http://schemas.microsoft.com/ws-rx/wsrmp/200702
PSM (WS-Policy 1.2 ou WS-Policy 1.5)

Mensagens

Criação de Sequências

WCF implementa CreateSequence e CreateSequenceResponse mensagens para estabelecer uma sequência de mensagens confiável. As seguintes restrições aplicam-se:

  • B1101: O iniciador WCF usa a mesma referência de ponto de extremidade que a CreateSequence mensagem e AcksToOffer/Endpoint.ReplyTo

  • R1102: As AcksToreferências , ReplyTo e Offer/Endpoint ponto CreateSequence final na mensagem devem ter valores de endereço com representações de cadeia de caracteres idênticas, de modo que correspondam ao octeto-wise.

    • O Respondente WCF verifica se a parte URI do , ReplyTo e Endpoint as referências de ponto de extremidade são idênticas antes de AcksTocriar uma sequência.
  • R1103: As AcksToreferências , ReplyTo e Offer/Endpoint endpoint CreateSequence na mensagem devem ter o mesmo conjunto de parâmetros de referência.

    • O WCF não impõe, mas assume que os parâmetros de referência do , ReplyTo e Offer/Endpoint as AcksToreferências de ponto de extremidade em CreateSequence são idênticos e usa parâmetros de referência da ReplyTo referência de ponto de extremidade para confirmações e mensagens de sequência converse.
  • B1104: O iniciador WCF não gera o elemento opcional Expires ou Offer/Expires na CreateSequence mensagem.

  • B1105: Ao acessar a CreateSequence mensagem, o Respondente WCF usa o Expires valor no CreateSequence elemento como o Expires valor no CreateSequenceResponse elemento . Caso contrário, o Respondente WCF lê e ignora os Expires valores and Offer/Expires .

  • B1106: Ao acessar a CreateSequenceResponse mensagem, o iniciador WCF lê o valor opcional Expires , mas não o usa.

  • B1107: O Iniciador e o Respondente do WCF sempre geram o elemento opcional IncompleteSequenceBehavior nos CreateSequence/Offer elementos e CreateSequenceResponse .

  • B1108: WCF usa apenas os DiscardFollowingFirstGap valores e NoDiscard no IncompleteSequenceBehavior elemento .

    • WS-ReliableMessaging utiliza o Offer mecanismo para estabelecer as duas sequências correlacionadas que formam uma sessão.
  • B1109: Se CreateSequence contiver um Offer elemento , o Respondente WCF unidirecional rejeitará a sequência oferecida respondendo com um CreateSequenceResponse elemento sem um Accept elemento.

  • B1110: Se um Respondente de Mensagens Confiável rejeitar a sequência oferecida, o Iniciador WCF falhará a sequência recém-estabelecida.

  • B1111: Se CreateSequence não contiver um Offer elemento , o Respondente WCF bidirecional rejeitará a sequência oferecida respondendo com uma CreateSequenceRefused falha.

  • R1112: Quando duas sequências inversas são estabelecidas usando o Offer mecanismo, a [address] propriedade da referência de ponto final CreateSequenceResponse/Accept/AcksTo deve corresponder ao URI de destino do byte de CreateSequence mensagem por byte.

  • R1113: Quando duas sequências inversas são estabelecidas usando o Offer mecanismo, todas as mensagens em ambas as sequências que fluem do Iniciador para o Respondente devem ser enviadas para a mesma referência de ponto final.

O WCF usa WS-ReliableMessaging para estabelecer sessões confiáveis entre o Iniciador e o Respondente. A implementação WS-ReliableMessaging do WCF fornece uma sessão confiável para padrões de mensagens unidirecionais, solicitação-resposta e full duplex. O mecanismo WS-ReliableMessaging Offer permite CreateSequenceCreateSequenceResponse estabelecer duas sequências de conversação correlacionadas e fornece um protocolo de sessão adequado para todos os pontos de extremidade de mensagem. Como o WCF fornece uma garantia de segurança para essa sessão, incluindo proteção de ponta a ponta para a integridade da sessão, é prático garantir que as mensagens destinadas à mesma parte cheguem ao mesmo destino. Isso também permite "pegar carona" em confirmações de sequência em mensagens de aplicativos. Portanto, as restrições R1102, R1112 e R1113 se aplicam ao WCF.

Um exemplo de uma CreateSequence mensagem.

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequence</wsa:Action>
    <wsa:MessageID>urn:uuid:949cca61-8813-42ff-ab33-18d9e3fa82fa</wsa:MessageID>
    <wsa:ReplyTo>
        <wsa:Address>http://Business456.com/clientA</wsa:Address>
    </wsa:ReplyTo>
    <wsa:To s:mustUnderstand="1">http://BusinessABC.com/serviceA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CreateSequence>
      <wsrm:AcksTo>
        <wsa:Address>http://Business456.com/clientA</wsa:Address>
      </wsrm:AcksTo>
      <wsrm:Offer>
        <wsrm:Identifier>urn:uuid:066b4730-fc82-458a-a5c1-210be4fb4e4e</wsrm:Identifier>
        <wsrm:Endpoint>
          <wsa:Address>http://Business456.com/clientA</wsa:Address>
        </wsrm:Endpoint>
        <wsrm:IncompleteSequenceBehavior>DiscardFollowingFirstGap</wsrm:IncompleteSequenceBehavior>
      </wsrm:Offer>
    </wsrm:CreateSequence>
  </s:Body>
</s:Envelope>

Um exemplo de uma CreateSequenceResponse mensagem.

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:949cca61-8813-42ff-ab33-18d9e3fa82fa</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">http://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CreateSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:IncompleteSequenceBehavior>DiscardFollowingFirstGap</wsrm:IncompleteSequenceBehavior>
      <wsrm:Accept>
        <wsrm:AcksTo>
          <wsa:Address>http://BusinessABC.com/serviceA</wsa:Address>
        </wsrm:AcksTo>
      </wsrm:Accept>
    </wsrm:CreateSequenceResponse>
  </s:Body>
</s:Envelope>

Fechando uma sequência

O WCF usa as mensagens e CloseSequenceResponse para um desligamento iniciado pela CloseSequence fonte de mensagens confiáveis. O destino de Mensagens Confiáveis do WCF não inicia o desligamento e a fonte de Mensagens Confiáveis do WCF não oferece suporte a um desligamento iniciado pelo destino de Mensagens Confiáveis. As seguintes restrições aplicam-se:

  • B1201: A fonte de mensagens confiáveis do WCF sempre envia uma CloseSequence mensagem para encerrar a sequência.

  • B1202: A fonte de mensagens confiáveis aguarda a confirmação de toda a gama de mensagens de sequência antes de enviar a CloseSequence mensagem.

  • B1203: A fonte de mensagens confiáveis sempre inclui o elemento opcional LastMsgNumber , a menos que a sequência não contenha mensagens.

  • R1204: O destino de mensagens confiáveis não deve iniciar o desligamento enviando uma CloseSequence mensagem.

  • B1205: Ao receber uma CloseSequence mensagem, a fonte de mensagens confiáveis do WCF considera a sequência incompleta e envia uma falha.

Um exemplo de uma CloseSequence mensagem.

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence</wsa:Action>
    <wsa:MessageID>urn:uuid:6ce1d4c3-e1c1-474f-a8c9-4210e37f7877</wsa:MessageID>
    <wsa:ReplyTo>
      <wsa:Address>http://Business456.com/clientA</wsa:Address>
    </wsa:ReplyTo>
    <wsa:To s:mustUnderstand="1">http://BusinessABC.com/serviceA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CloseSequence>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:LastMsgNumber>30</wsrm:LastMsgNumber>
    </wsrm:CloseSequence>
  </s:Body>
</s:Envelope>

Exemplo de CloseSequenceResponse mensagem:

<s:Envelope>
  <s:Header>
    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Lower="1" Upper="30"></wsrm:AcknowledgementRange>
      <wsrm:Final></wsrm:Final>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:6ce1d4c3-e1c1-474f-a8c9-4210e37f7877</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">http://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CloseSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
    </wsrm:CloseSequenceResponse>
  </s:Body>
</s:Envelope>

Terminação da sequência

O WCF usa principalmente o TerminateSequence/TerminateSequenceResponse aperto de mão depois de concluí-lo CloseSequence/CloseSequenceResponse . O destino de Mensagens Confiáveis do WCF não inicia a terminação e a fonte de Mensagens Confiáveis não oferece suporte a uma terminação iniciada pelo destino de Mensagens Confiáveis. As seguintes restrições aplicam-se:

  • B1301: O iniciador WCF só envia a TerminateSequence mensagem após a conclusão bem-sucedida do CloseSequence/CloseSequenceResponse handshake.

  • R1302: WCF valida que o LastMsgNumber elemento é consistente em todas as CloseSequence mensagens para TerminateSequence uma determinada sequência. Isto significa que LastMsgNumber ou não está presente em todas e TerminateSequenceCloseSequence mensagens, ou está presente e idêntico em todas e CloseSequenceTerminateSequence mensagens.

  • B1303: Ao receber uma TerminateSequence mensagem após o CloseSequence/CloseSequenceResponse handshake, o destino de mensagens confiáveis responde com uma TerminateSequenceResponse mensagem. Como a fonte de Mensagens Confiáveis tem a confirmação final antes de enviar a TerminateSequence mensagem, o destino de Mensagens Confiáveis sabe sem dúvida que a sequência termina e recupera recursos imediatamente.

  • B1304: Ao receber uma TerminateSequence mensagem antes do CloseSequence/CloseSequenceResponse handshake, o destino de mensagens confiáveis do WCF responde com uma TerminateSequenceResponse mensagem. Se o destino de Mensagens Confiáveis determinar que não há inconsistências na sequência, o destino de Mensagens Confiáveis aguardará um tempo especificado pelo destino do aplicativo antes de recuperar recursos, para permitir que o cliente tenha a chance de receber a confirmação final. Caso contrário, o destino de Mensagens Confiáveis recupera recursos imediatamente e indica ao destino do aplicativo que a sequência termina com dúvida, gerando o Faulted evento.

Um exemplo de uma TerminateSequence mensagem.

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequence</wsa:Action>
    <wsa:MessageID>urn:uuid:3597a398-4f3c-40f4-9335-8f1515572fdf</wsa:MessageID>
    <wsa:ReplyTo>
      <wsa:Address>http://Business456.com/clientA</wsa:Address>
    </wsa:ReplyTo>
    <wsa:To s:mustUnderstand="1">http://BusinessABC.com/serviceA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:TerminateSequence>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:LastMsgNumber>30</wsrm:LastMsgNumber>
      </wsrm:TerminateSequence>
  </s:Body>
</s:Envelope>

Exemplo de TerminateSequenceResponse mensagem:

<s:Envelope>
  <s:Header>
    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Lower="1" Upper="30"></wsrm:AcknowledgementRange>
      <wsrm:Final></wsrm:Final>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:3597a398-4f3c-40f4-9335-8f1515572fdf</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:TerminateSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
    </wsrm:TerminateSequenceResponse>
  </s:Body>
</s:Envelope>

Sequências

Segue-se uma lista de restrições que se aplicam a sequências:

  • B1401:WCF gera e acessa números de sequência não superiores ao valor máximo inclusivo de xs:long', 9223372036854775807.

Um exemplo de um Sequence cabeçalho.

<wsrm:Sequence s:mustUnderstand="1">
  <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
  <wsrm:MessageNumber>1</wsrm:MessageNumber>
</wsrm:Sequence>

Solicitar Confirmação

WCF usa o AckRequested cabeçalho como um mecanismo keep-alive.

Um exemplo de um AckRequested cabeçalho.

<wsrm:AckRequested>
  <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
</wsrm:AckRequested>

SequenceAgradecimento

O WCF usa um mecanismo "piggy-back" para confirmações de sequência fornecidas no WS-Reliable Messaging. As seguintes restrições aplicam-se:

  • R1601: Quando duas sequências inversas são estabelecidas usando o Offer mecanismo, o SequenceAcknowledgement cabeçalho pode ser incluído em qualquer mensagem de aplicativo transmitida ao destinatário pretendido. O ponto de extremidade remoto deve ser capaz de acessar um cabeçalho piggyback SequenceAcknowledgement .

  • B1602: WCF não gera SequenceAcknowledgement cabeçalhos que contêm Nack elementos. O WCF valida que cada Nack elemento contém um número de sequência, mas ignora o elemento e o Nack valor.

Um exemplo de um SequenceAcknowledgement cabeçalho.

<wsrm:SequenceAcknowledgement>
  <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
  <wsrm:AcknowledgementRange Lower="1" Upper="1"></wsrm:AcknowledgementRange>
</wsrm:SequenceAcknowledgement>

Falhas WS-ReliableMessaging

A seguir está uma lista de restrições que se aplicam à implementação WCF de falhas WS-ReliableMessaging. As seguintes restrições aplicam-se:

  • B1701: WCF não gera MessageNumberRollover falhas.

  • B1702: Sobre SOAP 1.2, quando o ponto de extremidade de serviço atinge seu limite de conexão e não pode processar novas conexões, o WCF gera um subcódigo de falha aninhado CreateSequenceRefused , netrm:ConnectionLimitReached, conforme mostrado no exemplo a seguir.

<s:Envelope>
  <s:Header>
    <wsa:Action>http://docs.oasis-open.org/ws-rx/wsrm/200702/fault</wsa:Action>
  </s:Header>
  <s:Body>
    <s:Fault>
      <s:Code>
        <s:Value>s:Receiver</s:Value>
        <s:Subcode>
          <s:Value>wsrm:CreateSequenceRefused</s:Value>
          <s:Subcode>
            <s:Value>netrm:ConnectionLimitReached</s:Value>
          </s:Subcode>
        </s:Subcode>
      </s:Code>
      <s:Reason>
        <s:Text xml:lang="en">Server 'http://BusinessABC.com/serviceA' is too busy to process this request. Try again later.</s:Text>
      </s:Reason>
    </s:Fault>
  </s:Body>
</s:Envelope>

WS-Endereçamento de falhas

Como WS-ReliableMessaging usa WS-Addressing, a implementação WCF WS-ReliableMessaging pode gerar e transmitir falhas WS-Addressing. Esta seção aborda as falhas WS-Addressing que o WCF gera e transmite explicitamente na camada WS-ReliableMessaging:

  • B1801: WCF gera e transmite a Message Addressing Header Required falha quando uma das seguintes opções é verdadeira:

    • Um CreateSequence, CloseSequence ou TerminateSequence mensagem está faltando um MessageId cabeçalho.

    • Um CreateSequence, CloseSequence ou TerminateSequence mensagem está faltando um ReplyTo cabeçalho.

    • Um CreateSequenceResponse, CloseSequenceResponse, ou TerminateSequenceResponse mensagem está faltando um RelatesTo cabeçalho.

  • B1802: WCF gera e transmite a Endpoint Unavailable falha para indicar que não há escuta de ponto final que possa processar a sequência com base no exame dos cabeçalhos de endereçamento na CreateSequence mensagem.

Composição do Protocolo

Composição com WS-Addressing

O WCF suporta duas versões do WS-Addressing: WS-Addressing 2004/08 [WS-ADDR] e W3C WS-Addressing 1.0 Recommendations [WS-ADDR-CORE] e [WS-ADDR-SOAP].

Embora a especificação WS-ReliableMessaging mencione apenas WS-Addressing 2004/08, ela não restringe a versão WS-Addressing a ser usada. A seguir está uma lista de restrições que se aplicam ao WCF:

  • R2101: O WS-Addressing 2004/08 e o WS-Addressing 1.0 podem ser usados com o WS-Reliable Messaging.

  • R2102: Uma única versão do WS-Addressing deve ser usada em toda uma determinada sequência WS-ReliableMessaging ou um par de sequências inversas correlacionadas usando o Offer mecanismo.

Composição com SOAP

WCF suporta o uso de SOAP 1.1 e SOAP 1.2 com WS-Reliable Messaging.

Composição com WS-Security e WS-SecureConversation

O WCF fornece proteção para sequências WS-ReliableMessaging usando transporte seguro (HTTPS), composição com WS-Security e composição com WS-Secure Conversation. O protocolo WS-ReliableMessaging 1.1, o WS-Security 1.1 e o protocolo WS-Secure Conversation 1.3 devem ser usados juntos. A seguir está uma lista de restrições que se aplicam ao WCF:

  • R2301: Para proteger a integridade de uma sequência WS-ReliableMessaging além da integridade e confidencialidade de mensagens individuais, o WCF requer que o WS-Secure Conversation seja usado.

  • R2302:A sessão do AWS-Secure Conversation deve ser estabelecida antes de estabelecer a(s) sequência(s) WS-ReliableMessaging.

  • R2303: Se o tempo de vida da sequência WS-ReliableMessaging exceder o tempo de vida da sessão WS-Secure Conversation, o estabelecido usando WS-Secure SecurityContextToken Conversation deverá ser renovado usando a associação WS-Secure Conversation correspondente.

  • B2304:WS-ReliableMessaging sequência ou um par de sequências de converso correlacionadas são sempre vinculados a uma única sessão WS-SecureConversation.

  • R2305: Quando composto com WS-Secure Conversation, o respondente WCF requer que a CreateSequence mensagem contenha o wsse:SecurityTokenReference elemento e o wsrm:UsesSequenceSTR cabeçalho.

Um exemplo de um UsesSequenceSTR cabeçalho.

<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>

Composição com sessões SSL/TLS

WCF não suporta composição com sessões SSL/TLS:

  • B2401: WCF não gera o wsrm:UsesSequenceSSL cabeçalho.

  • R2402: Um iniciador de mensagens confiável não deve enviar uma CreateSequence mensagem com um wsrm:UsesSequenceSSL cabeçalho para um Respondente WCF.

Composição com WS-Policy

O WCF suporta duas versões do WS-Policy: WS-Policy 1.2 e WS-Policy 1.5.

WS-ReliableMessaging WS-Policy Assertion

O WCF usa WS-ReliableMessaging WS-Policy Assertion wsrm:RMAssertion para descrever os recursos de pontos de extremidade. A seguir está uma lista de restrições que se aplicam ao WCF:

  • B3001: WCF anexa wsrmn:RMAssertion WS-Policy Assertion a wsdl:binding elementos. O WCF suporta anexos wsdl:binding e wsdl:port elementos.

  • B3002: WCF nunca gera a wsp:Optional tag.

  • B3003: Ao acessar a wsrmp:RMAssertion WS-Policy Assertion, o WCF ignora a wsp:Optional tag e trata a política WS-RM como obrigatória.

  • R3004: Como o WCF não compõe com sessões SSL/TLS, o WCF não aceita a política que especifica wsrmp:SequenceTransportSecurity.

  • B3005: WCF sempre gera o wsrmp:DeliveryAssurance elemento .

  • B3006: WCF sempre especifica a garantia de wsrmp:ExactlyOnce entrega.

  • B3007: WCF gera e lê as seguintes propriedades da asserção WS-ReliableMessaging e fornece controle sobre elas no WCFReliableSessionBindingElement:

    • netrmp:InactivityTimeout

    • netrmp:AcknowledgementInterval

    Um exemplo de um RMAssertionarquivo .

    <wsrmp:RMAssertion>
      <wsp:Policy>
        <wsrmp:SequenceSTR/>
        <wsrmp:DeliveryAssurance>
          <wsp:Policy>
            <wsrmp:ExactlyOnce/>
            <wsrmp:InOrder/>
          </wsp:Policy>
        </wsrmp:DeliveryAssurance>
      </wsp:Policy>
      <netrmp:InactivityTimeout Milliseconds="600000"/>
      <netrmp:AcknowledgementInterval Milliseconds="200"/>
    </wsrmp:RMAssertion>
    

Controle de fluxo WS-ReliableMessaging Extension

O WCF usa a extensibilidade WS-ReliableMessaging para fornecer controle adicional opcional mais rígido sobre o fluxo de mensagens de sequência.

O controle de fluxo é habilitado definindo a ReliableSessionBindingElement.FlowControlEnabled propriedade como true. A seguir está uma lista de restrições que se aplicam ao WCF:

  • B4001: Quando o controle de fluxo de mensagens confiável está habilitado, o WCF gera um netrm:BufferRemaining elemento na extensibilidade do elemento do SequenceAcknowledgement cabeçalho, conforme mostrado no exemplo a seguir.

    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Upper="1" Lower="1"/>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    
  • B4002: Mesmo quando o controle de fluxo de mensagens confiável está habilitado, o SequenceAcknowledgement WCF não requer um netrm:BufferRemaining elemento no cabeçalho.

  • B4003: WCF Reliable Messaging Destination usa netrm:BufferRemaining para indicar quantas novas mensagens ele pode armazenar em buffer.

  • B4004: Quando o controle de fluxo de mensagens confiável está habilitado, a fonte de mensagens confiável do WCF usa o valor de para limitar a transmissão de netrm:BufferRemaining mensagens.

  • B4005: WCF gera netrm:BufferRemaining valores inteiros entre 0 e 4096 inclusive, e lê valores inteiros entre 0 e xs:into valor de 's maxInclusive 214748364 inclusive.

Padrões de troca de mensagens

Esta seção descreve o comportamento do WCF quando WS-ReliableMessaging é usado para diferentes padrões de troca de mensagens. Para cada Padrão de Troca de Mensagens, os dois cenários de implantação a seguir são considerados:

  • Iniciador não endereçável: o iniciador está protegido por um firewall; O Respondente pode entregar mensagens ao Iniciador somente em respostas HTTP.

  • Iniciador endereçável: tanto o iniciador quanto o respondente podem receber solicitações HTTP; em outras palavras, duas conexões HTTP inversas podem ser estabelecidas.

Iniciador unidirecional e não endereçável

Enlace

O WCF fornece um padrão de troca de mensagens unidirecional usando uma sequência em um canal HTTP. O WCF usa solicitações HTTP para transmitir todas as mensagens do Iniciador para o Respondente e respostas HTTP para transmitir todas as mensagens do Respondente para o Iniciador.

CreateSequence Exchange

O iniciador WCF transmite uma CreateSequence mensagem sem Offer elemento em uma solicitação HTTP e espera a CreateSequenceResponse mensagem na resposta HTTP. O Respondente WCF cria uma sequência e transmite a CreateSequenceResponse mensagem sem nenhum Accept elemento na resposta HTTP.

SequenceAgradecimento

O Iniciador do WCF processa confirmações na resposta de todas as mensagens, exceto a mensagem e as CreateSequence mensagens de falha. O Respondente WCF sempre transmite uma confirmação autônoma na resposta HTTP para todas as sequências e AckRequested mensagens.

FecharSequence Exchange

O iniciador WCF transmite uma CloseSequence mensagem em uma solicitação HTTP e espera a CreateSequenceResponse mensagem na resposta HTTP. O Respondente WCF transmite a CloseSequenceResponse mensagem na resposta HTTP.

TerminateSequence Exchange

O iniciador WCF transmite uma TerminateSequence mensagem em uma solicitação HTTP e espera a TerminateSequenceResponse mensagem na resposta HTTP. O Respondente WCF transmite a TerminateSequenceResponse mensagem na resposta HTTP.

Iniciador endereçável unidirecional

Enlace

O WCF fornece um padrão de troca de mensagens unidirecional usando uma sequência em um canal HTTP de entrada e um canal HTTP de saída. WCF usa as solicitações HTTP para transmitir todas as mensagens. Todas as respostas HTTP têm um corpo vazio e um código de status HTTP 202.

CreateSequence Exchange

O iniciador WCF transmite uma CreateSequence mensagem sem Offer elemento em uma solicitação HTTP. O Respondente WCF cria uma sequência e transmite a CreateSequenceResponse mensagem sem Accept nenhum elemento em uma solicitação HTTP.

Duplex, iniciador endereçável

Enlace

O WCF fornece um padrão de troca de mensagens bidirecional totalmente assíncrono usando duas sequências em um canal HTTP de entrada e um de saída. Este padrão de troca de mensagens pode ser misturado com o padrão de troca de mensagens do Request/ReplyAddressable Iniciador de forma limitada. WCF usa solicitações HTTP para transmitir todas as mensagens. Todas as respostas HTTP têm um corpo vazio e um código de status HTTP 202.

CreateSequence Exchange

O iniciador WCF transmite uma CreateSequence mensagem com um Offer elemento em uma solicitação HTTP. O Respondente WCF garante que o CreateSequence tenha um Offer elemento e, em seguida, cria uma sequência e transmite a CreateSequenceResponse mensagem com um Accept elemento .

Tempo de vida da sequência

O WCF trata as duas sequências como uma sessão totalmente duplex.

Ao gerar uma falha que falha uma sequência, o WCF espera que o ponto de extremidade remoto falhe ambas as sequências. Ao ler uma falha que falha uma sequência, o WCF falha ambas as sequências.

WCF pode fechar sua sequência de saída e continuar a processar mensagens em sua sequência de entrada. Por outro lado, o WCF pode processar o fechamento da sequência de entrada e continuar a enviar mensagens em sua sequência de saída.

Solicitação-resposta e iniciador unidirecional não endereçável

Enlace

O WCF fornece um padrão de troca de mensagens unidirecionais e solicitação-resposta usando duas sequências em um canal HTTP. O WCF usa solicitações HTTP para transmitir todas as mensagens do Iniciador para o Respondente e respostas HTTP para transmitir todas as mensagens do Respondente para o Iniciador.

CreateSequence Exchange

O iniciador WCF transmite uma CreateSequence mensagem com um Offer elemento em uma solicitação HTTP e espera a CreateSequenceResponse mensagem na resposta HTTP. O Respondente WCF cria uma sequência e transmite a CreateSequenceResponse mensagem com um Accept elemento na resposta HTTP.

Mensagem unidirecional

Para concluir uma troca de mensagens unidirecional com êxito, o Iniciador WCF transmite uma mensagem de sequência de solicitação na solicitação HTTP e recebe uma mensagem autônoma SequenceAcknowledgement na resposta HTTP. O SequenceAcknowledgement deve reconhecer a mensagem transmitida.

O Respondente WCF pode responder à solicitação com uma confirmação, uma falha ou uma resposta com um corpo vazio e código de status HTTP 202.

Mensagens bidirecionais

Para concluir um protocolo de troca de mensagens bidirecionais com êxito, o Iniciador WCF transmite uma mensagem de sequência de solicitação na solicitação HTTP e recebe uma mensagem de sequência de resposta na resposta HTTP. A resposta deve conter uma SequenceAcknowledgement mensagem de confirmação da sequência de pedidos transmitida.

O Respondente WCF pode responder à solicitação com uma resposta do aplicativo, uma falha ou uma resposta com um corpo vazio e código de status HTTP 202.

Devido à presença de mensagens unidirecionais e ao tempo das respostas do aplicativo, o número de sequência da mensagem de sequência de solicitação e o número de sequência da mensagem de resposta não têm correlação.

Repetindo respostas

O WCF depende da correlação solicitação-resposta HTTP para correlação de protocolo de troca de mensagens bidirecional. Por isso, o Iniciador WCF não para de tentar novamente uma mensagem de sequência de solicitação quando a mensagem de sequência de solicitação é confirmada, mas sim quando a resposta HTTP carrega uma SequenceAcknowledgementresposta ou falha do aplicativo. O Respondente WCF tenta novamente respostas na resposta HTTP da solicitação à qual a resposta está correlacionada.

FecharSequence Exchange

Depois de receber todas as mensagens de sequência de resposta e confirmações para todas as mensagens de sequência de solicitação unidirecional, o Iniciador WCF transmite uma CloseSequence mensagem para a sequência de solicitação em uma solicitação HTTP e espera a CloseSequenceResponse resposta HTTP.

Fechar a sequência de solicitação fecha implicitamente a sequência de resposta. Isso significa que o Iniciador do WCF inclui o Final SequenceAcknowledgement da sequência de resposta na mensagem e a CloseSequence sequência de resposta não tem uma CloseSequence troca.

O Respondente WCF garante que todas as respostas sejam reconhecidas e transmite a CloseSequenceResponse mensagem na resposta HTTP.

TerminateSequence Exchange

Depois de receber a CloseSequenceResponse mensagem, o iniciador do WCF transmite uma TerminateSequence mensagem para a sequência de solicitação em uma solicitação HTTP e espera a TerminateSequenceResponse resposta na resposta HTTP.

Como a CloseSequence troca, encerrar a sequência de solicitação encerra implicitamente a sequência de resposta. Isso significa que o Iniciador do WCF inclui o final SequenceAcknowledgement da sequência de resposta na TerminateSequence mensagem e a sequência de resposta não tem uma TerminateSequence troca.

O Respondente WCF transmite a TerminateSequenceResponse mensagem na resposta HTTP.

Solicitação/resposta, iniciador endereçável

Enlace

O WCF fornece um padrão de troca de mensagens de solicitação-resposta usando duas sequências em um canal HTTP de entrada e um de saída. Este padrão de troca de mensagens pode ser misturado com o padrão de troca de mensagens do Duplex, Addressable Iniciador de forma limitada. WCF usa as solicitações HTTP para transmitir todas as mensagens. Todas as respostas HTTP têm um corpo vazio e um código de status HTTP 202.

CreateSequence Exchange

O iniciador WCF transmite uma CreateSequence mensagem com um Offer elemento em uma solicitação HTTP. O Respondente WCF garante que o CreateSequence tem um Offer elemento em seguida, cria uma sequência e transmite a CreateSequenceResponse mensagem com um Accept elemento .

Correlação Solicitação/Resposta

O seguinte aplica-se a todos os pedidos e respostas correlacionados:

  • O WCF garante que todas as mensagens de solicitação de aplicativo tenham uma referência de ReplyTo ponto de extremidade e um MessageIdarquivo .

  • O WCF aplica a referência de ponto de extremidade local como cada mensagem de solicitação de aplicativo.ReplyTo A referência do ponto de extremidade local é a CreateSequence mensagem do Iniciador ReplyTo e a CreateSequence mensagem do To Respondente.

  • O WCF garante que as mensagens de solicitação de entrada tenham a MessageId e a ReplyTo.

  • O WCF garante que o ReplyTo URI da referência de ponto de extremidade de todas as mensagens de solicitação de aplicativo corresponda à referência de ponto de extremidade local, conforme definido anteriormente.

  • O WCF garante que todas as respostas tenham o correto RelatesTo e To cabeçalhos seguindo wsa as regras de correlação solicitação/resposta.