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 eAcksTo
Offer/Endpoint
.ReplyTo
R1102: As
AcksTo
referências ,ReplyTo
eOffer/Endpoint
pontoCreateSequence
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
eEndpoint
as referências de ponto de extremidade são idênticas antes deAcksTo
criar uma sequência.
- O Respondente WCF verifica se a parte URI do ,
R1103: As
AcksTo
referências ,ReplyTo
eOffer/Endpoint
endpointCreateSequence
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
eOffer/Endpoint
asAcksTo
referências de ponto de extremidade emCreateSequence
são idênticos e usa parâmetros de referência daReplyTo
referência de ponto de extremidade para confirmações e mensagens de sequência converse.
- O WCF não impõe, mas assume que os parâmetros de referência do ,
B1104: O iniciador WCF não gera o elemento opcional
Expires
ouOffer/Expires
naCreateSequence
mensagem.B1105: Ao acessar a
CreateSequence
mensagem, o Respondente WCF usa oExpires
valor noCreateSequence
elemento como oExpires
valor noCreateSequenceResponse
elemento . Caso contrário, o Respondente WCF lê e ignora osExpires
valores andOffer/Expires
.B1106: Ao acessar a
CreateSequenceResponse
mensagem, o iniciador WCF lê o valor opcionalExpires
, mas não o usa.B1107: O Iniciador e o Respondente do WCF sempre geram o elemento opcional
IncompleteSequenceBehavior
nosCreateSequence/Offer
elementos eCreateSequenceResponse
.B1108: WCF usa apenas os
DiscardFollowingFirstGap
valores eNoDiscard
noIncompleteSequenceBehavior
elemento .- WS-ReliableMessaging utiliza o
Offer
mecanismo para estabelecer as duas sequências correlacionadas que formam uma sessão.
- WS-ReliableMessaging utiliza o
B1109: Se
CreateSequence
contiver umOffer
elemento , o Respondente WCF unidirecional rejeitará a sequência oferecida respondendo com umCreateSequenceResponse
elemento sem umAccept
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 umOffer
elemento , o Respondente WCF bidirecional rejeitará a sequência oferecida respondendo com umaCreateSequenceRefused
falha.R1112: Quando duas sequências inversas são estabelecidas usando o
Offer
mecanismo, a[address]
propriedade da referência de ponto finalCreateSequenceResponse/Accept/AcksTo
deve corresponder ao URI de destino do byte deCreateSequence
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 CreateSequence
CreateSequenceResponse
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 doCloseSequence/CloseSequenceResponse
handshake.R1302: WCF valida que o
LastMsgNumber
elemento é consistente em todas asCloseSequence
mensagens paraTerminateSequence
uma determinada sequência. Isto significa queLastMsgNumber
ou não está presente em todas eTerminateSequence
CloseSequence
mensagens, ou está presente e idêntico em todas eCloseSequence
TerminateSequence
mensagens.B1303: Ao receber uma
TerminateSequence
mensagem após oCloseSequence/CloseSequenceResponse
handshake, o destino de mensagens confiáveis responde com umaTerminateSequenceResponse
mensagem. Como a fonte de Mensagens Confiáveis tem a confirmação final antes de enviar aTerminateSequence
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 doCloseSequence/CloseSequenceResponse
handshake, o destino de mensagens confiáveis do WCF responde com umaTerminateSequenceResponse
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 oFaulted
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, oSequenceAcknowledgement
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 piggybackSequenceAcknowledgement
.B1602: WCF não gera
SequenceAcknowledgement
cabeçalhos que contêmNack
elementos. O WCF valida que cadaNack
elemento contém um número de sequência, mas ignora o elemento e oNack
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
ouTerminateSequence
mensagem está faltando umMessageId
cabeçalho.Um
CreateSequence
,CloseSequence
ouTerminateSequence
mensagem está faltando umReplyTo
cabeçalho.Um
CreateSequenceResponse
,CloseSequenceResponse
, ouTerminateSequenceResponse
mensagem está faltando umRelatesTo
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 naCreateSequence
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 owsse:SecurityTokenReference
elemento e owsrm: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 umwsrm: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 awsdl:binding
elementos. O WCF suporta anexoswsdl:binding
ewsdl:port
elementos.B3002: WCF nunca gera a
wsp:Optional
tag.B3003: Ao acessar a
wsrmp:RMAssertion
WS-Policy Assertion, o WCF ignora awsp: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 WCF
ReliableSessionBindingElement
:netrmp:InactivityTimeout
netrmp:AcknowledgementInterval
Um exemplo de um
RMAssertion
arquivo .<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 doSequenceAcknowledgement
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 umnetrm: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 exs:int
o valor de 'smaxInclusive
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/Reply
Addressable
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 SequenceAcknowledgement
resposta 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 umMessageId
arquivo .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 é aCreateSequence
mensagem do IniciadorReplyTo
e aCreateSequence
mensagem doTo
Respondente.O WCF garante que as mensagens de solicitação de entrada tenham a
MessageId
e aReplyTo
.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
eTo
cabeçalhos seguindowsa
as regras de correlação solicitação/resposta.