Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются сведения о реализации Windows Communication Foundation (WCF) для протокола WS-ReliableMessaging февраля 2007 г. (версия 1.1), необходимого для взаимодействия с использованием транспорта HTTP. WCF следует спецификации WS-ReliableMessaging с ограничениями и пояснениями, изложенными в этом разделе. Обратите внимание, что протокол WS-ReliableMessaging версии 1.1 реализуется начиная с .NET Framework 3.5.
Протокол WS-ReliableMessaging февраля 2007 года реализуется в WCF с помощью ReliableSessionBindingElement.
Для удобства в этом разделе используются следующие роли:
Инициатор: клиент, инициирующий создание последовательности сообщений WS-Reliable.
Ответитель: служба, которая получает запросы инициатора.
В этом документе используются префиксы и пространства имен в следующей таблице.
Приставка | Пространство имен |
---|---|
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 |
WSP | (либо WS-Policy 1.2 или WS-Policy 1.5) |
Обмен сообщениями
Создание последовательности
WCF реализует CreateSequence
и CreateSequenceResponse
сообщения для установления надежной последовательности обмена сообщениями. Применяются следующие ограничения:
B1101: Инициатор WCF использует ту же ссылку на конечную точку, что и компоненты сообщения
CreateSequence
,ReplyTo
,AcksTo
иOffer/Endpoint
.R1102: Ссылки на
AcksTo
,ReplyTo
иOffer/Endpoint
конечные точки в сообщенииCreateSequence
должны иметь адреса с идентичными строковыми представлениями, так чтобы они совпадали побайтово.- Средство реагирования WCF проверяет, совпадают ли URI-части в
AcksTo
,ReplyTo
иEndpoint
ссылках на конечные точки перед созданием последовательности.
- Средство реагирования WCF проверяет, совпадают ли URI-части в
R1103: ссылки на конечные точки
AcksTo
,ReplyTo
иOffer/Endpoint
вCreateSequence
сообщении должны иметь одинаковый набор ссылочных параметров.- WCF не обеспечивает, но предполагает, что ссылочные параметры
AcksTo
,ReplyTo
иOffer/Endpoint
в ссылках на конечные точкиCreateSequence
идентичны и использует ссылочные параметры изReplyTo
ссылки на конечную точку для подтверждений и сообщений последовательности.
- WCF не обеспечивает, но предполагает, что ссылочные параметры
B1104: Инициатор WCF не создает необязательный элемент
Expires
или элементOffer/Expires
в сообщенииCreateSequence
.B1105: при доступе к
CreateSequence
сообщению средство ответа WCF использует значениеExpires
в элементеCreateSequence
в качестве значенияExpires
в элементеCreateSequenceResponse
. В противном случае средство реагирования WCF считывает и игнорирует значенияExpires
иOffer/Expires
.B1106: при обращении
CreateSequenceResponse
к сообщению инициатор WCF читает необязательноеExpires
значение, но не использует его.B1107: инициатор WCF и ответчик всегда создают необязательный
IncompleteSequenceBehavior
элемент вCreateSequence/Offer
иCreateSequenceResponse
элементах.B1108: WCF использует только значения
DiscardFollowingFirstGap
иNoDiscard
в элементеIncompleteSequenceBehavior
.- WS-ReliableMessaging использует
Offer
механизм для установления двух противоположных коррелированных последовательностей, формирующих сеанс.
- WS-ReliableMessaging использует
B1109: если
CreateSequence
содержит элементOffer
, WCF Responder отклоняет предложенную последовательность, отвечаяCreateSequenceResponse
без элементаAccept
.B1110: Если Надежный Ответчик обмена сообщениями отклоняет предложенную последовательность, инициатор WCF прерывает только что установленную последовательность.
B1111: Если
CreateSequence
не содержит элементOffer
, двусторонний компонент ответа WCF отклоняет предложенную последовательность, отвечая с ошибкойCreateSequenceRefused
.R1112: при создании двух обратных последовательностей с помощью
Offer
механизма[address]
свойствоCreateSequenceResponse/Accept/AcksTo
ссылки на конечную точку должно байт в байт совпадать с целевым URI сообщенияCreateSequence
.R1113: при установке двух обратных последовательностей с помощью
Offer
механизма все сообщения обоих последовательностей, поступающих от инициатора к ответчику, должны отправляться в одну и ту же ссылку на конечную точку.
WCF использует WS-ReliableMessaging для установления надежных сеансов между Инициатором и Ответчиком. Реализация WCF WS-ReliableMessaging предоставляет надежный сеанс для одностороннего, ответного запроса и полного дуплексного обмена сообщениями. Механизм WS-ReliableMessaging Offer
на CreateSequence
и CreateSequenceResponse
позволяет установить две связанные обратные последовательности и обеспечивает протокол сеанса, подходящий для всех конечных точек сообщения. Так как WCF предоставляет гарантию безопасности для такого сеанса, включая сквозную защиту для целостности сеансов, практически необходимо обеспечить, чтобы сообщения, предназначенные для той же стороны, прибыли в то же место назначения. Это также позволяет объединять подтверждения последовательности с сообщениями приложения. Поэтому ограничения R1102, R1112 и R1113 применяются к WCF.
Пример CreateSequence
сообщения.
<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>
Пример CreateSequenceResponse
сообщения.
<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>
Закрытие последовательности
WCF использует сообщения CloseSequence
и CloseSequenceResponse
для завершения работы надежной передачи сообщений, инициированной источником. Приемник надежного обмена сообщениями WCF не инициирует завершение работы, а источник надежного обмена сообщениями WCF не поддерживает завершение, инициируемое приемником. Применяются следующие ограничения:
B1201: источник надежного обмена сообщениями WCF всегда отправляет
CloseSequence
сообщение для завершения последовательности.B1202: источник надежного обмена сообщениями ожидает подтверждения всего диапазона последовательности сообщений перед отправкой
CloseSequence
сообщения.B1203: источник надежного обмена сообщениями всегда включает необязательный
LastMsgNumber
элемент, если последовательность не содержит сообщений.R1204: Назначение надёжного обмена сообщениями не должно инициировать завершение работы путем отправки сообщения
CloseSequence
.B1205: при получении
CloseSequence
сообщения источник надежных сообщений WCF считает последовательность неполной и отправляет ошибку.
Пример CloseSequence
сообщения.
<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>
Пример CloseSequenceResponse
сообщения:
<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>
Завершение последовательности
WCF в основном использует TerminateSequence/TerminateSequenceResponse
рукопожатие после завершения CloseSequence/CloseSequenceResponse
рукопожатия. Назначение надежного обмена сообщениями WCF не инициирует завершение обмена, а источник надежного обмена сообщениями не поддерживает завершение обмена, инициированное назначением. Применяются следующие ограничения:
B1301: инициатор WCF отправляет
TerminateSequence
сообщение только после успешного завершенияCloseSequence/CloseSequenceResponse
рукопожатия.R1302: WCF проверяет, что элемент
LastMsgNumber
согласован во всех сообщенияхCloseSequence
иTerminateSequence
для заданной последовательности. Это означает, чтоLastMsgNumber
либо не присутствует во всехCloseSequence
иTerminateSequence
сообщениях, либо присутствует и идентичен во всехCloseSequence
иTerminateSequence
сообщениях.B1303: при получении
TerminateSequence
сообщения послеCloseSequence/CloseSequenceResponse
рукопожатия адресат Надежного обмена сообщениями отвечает сообщениемTerminateSequenceResponse
. Поскольку источник надежных сообщений получает окончательное подтверждение перед отправкойTerminateSequence
сообщения, получатель точно знает, что последовательность завершена, и сразу же освобождает ресурсы.B1304: При получении сообщения
TerminateSequence
перед рукопожатиемCloseSequence/CloseSequenceResponse
назначение WCF Reliable Messaging отвечает сообщениемTerminateSequenceResponse
. Если конечное назначение Reliable Messaging определяет, что в последовательности отсутствуют несоответствия, оно ожидает время, указанное конечным назначением приложения, перед освобождением ресурсов, чтобы дать клиенту возможность получить окончательное подтверждение. В противном случае целевой объект Reliable Messaging немедленно освобождает ресурсы и указывает приложению назначения, что последовательность завершается с сомнением, инициируя событиеFaulted
.
Пример TerminateSequence
сообщения.
<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>
Пример TerminateSequenceResponse
сообщения:
<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>
Последовательности
Ниже приведен список ограничений, которые применяются к последовательности.
- B1401:WCF создает и обращается к номерам последовательности не выше
xs:long
максимального инклюзивного значения, 9223372036854775807.
Пример заголовка Sequence
.
<wsrm:Sequence s:mustUnderstand="1">
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
<wsrm:MessageNumber>1</wsrm:MessageNumber>
</wsrm:Sequence>
Подтверждение получения запроса
WCF использует AckRequested
заголовок в качестве механизма поддержания активности.
Пример заголовка AckRequested
.
<wsrm:AckRequested>
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
</wsrm:AckRequested>
Подтверждение Последовательности
WCF использует механизм "piggy-back" для подтверждения последовательности, предоставляемых в WS-Reliable Обмена сообщениями. Применяются следующие ограничения:
R1601: При установке двух обратных последовательностей с помощью механизма
Offer
, заголовокSequenceAcknowledgement
может быть включен в любое сообщение приложения, предназначенное для целевого получателя. Удаленная конечная точка должна иметь доступ к заголовку с наложениемSequenceAcknowledgement
.B1602: WCF не генерирует
SequenceAcknowledgement
заголовки, содержащиеNack
элементы. WCF проверяет, содержит ли каждыйNack
элемент порядковый номер, но в противном случае игнорируетNack
элемент и значение.
Пример заголовка SequenceAcknowledgement
.
<wsrm:SequenceAcknowledgement>
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
<wsrm:AcknowledgementRange Lower="1" Upper="1"></wsrm:AcknowledgementRange>
</wsrm:SequenceAcknowledgement>
ошибки WS-ReliableMessaging
Ниже приведен список ограничений, которые применяются к реализации ошибок WCF WS-ReliableMessaging. Применяются следующие ограничения:
B1701: WCF не создает
MessageNumberRollover
ошибки.B1702: по протоколу SOAP 1.2, когда конечная точка службы достигает предела подключения и не может обрабатывать новые подключения, WCF создает вложенный
CreateSequenceRefused
подкод сбоя,netrm:ConnectionLimitReached
как показано в следующем примере.
<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-Addressing
Так как WS-ReliableMessaging использует WS-Addressing, реализация WCF WS-ReliableMessaging может генерировать и передавать ошибки WS-Addressing. В этом разделе рассматриваются ошибки WS-Addressing, которые WCF явно генерирует и передает на уровне WS-ReliableMessaging:
B1801:WCF создает и передает ошибку
Message Addressing Header Required
, если одно из следующих значений имеет значение true:Отсутствует заголовок
CreateSequence
в сообщенииCloseSequence
,TerminateSequence
илиMessageId
.Отсутствует заголовок
CreateSequence
в сообщенииCloseSequence
,TerminateSequence
илиReplyTo
.Отсутствует заголовок \
CreateSequenceResponse
в сообщении \CloseSequenceResponse
, \TerminateSequenceResponse
или \RelatesTo
.
B1802:WCF создает и передает
Endpoint Unavailable
ошибку, указывающую на отсутствие прослушивания конечной точки, которая может обрабатывать последовательность на основе проверки заголовков адресации в сообщенииCreateSequence
.
Состав протокола
Композиция с WS-Addressing
WCF поддерживает две версии WS-Адресации: WS-Addressing 2004/08 [WS-ADDR] и W3C WS-Addressing 1.0 Рекомендаций [WS-ADDR-CORE] и [WS-ADDR-SOAP].
Несмотря на то, что в спецификации WS-ReliableMessaging упоминается только версия WS-Addressing 2004/08, это не ограничивает использование версии WS-Addressing. Ниже приведен список ограничений, которые применяются к WCF:
R2101: можно использовать WS-Addressing 2004/08 и WS-Addressing 1.0 с WS-Reliable для обмена сообщениями.
R2102: Единая версия WS-Addressing должна использоваться на протяжении всей заданной WS-ReliableMessaging последовательности или пары последовательностей, имеющих обратное направление, сопоставленных с помощью
Offer
механизма.
Композиция с помощью SOAP
WCF поддерживает использование SOAP 1.1 и SOAP 1.2 в обмене сообщениями WS-Reliable.
Композиция с WS-Security и WS-SecureConversation
WCF обеспечивает защиту последовательностей WS-ReliableMessaging, используя безопасный транспорт (HTTPS), а также интеграцию с WS-Security и WS-Secure Conversation. Протоколы WS-ReliableMessaging 1.1, WS-Security 1.1 и WS-Secure 1.3 следует использовать вместе. Ниже приведен список ограничений, которые применяются к WCF:
R2301. Для защиты целостности последовательности WS-ReliableMessaging в дополнение к целостности и конфиденциальности отдельных сообщений WCF требует, чтобы использовалась WS-Secure Беседа.
R2302: перед установкой последовательностей WS-ReliableMessaging необходимо установить сеанс беседыAWS-Secure.
R2303. Если время существования последовательности WS-ReliableMessaging превышает время существования сеанса разговора WS-Secure,
SecurityContextToken
установленное с помощью WS-Secure Разговора, необходимо обновить с помощью соответствующей привязки обновления разговора WS-Secure.B2304:WS-ReliableMessaging последовательность или пара коррелированных обратных последовательностей всегда привязаны к одному WS-SecureConversation сеансу.
R2305: При использовании с WS-Secure Conversation, WCF ответчик требует, чтобы сообщение
CreateSequence
содержало элементwsse:SecurityTokenReference
и заголовокwsrm:UsesSequenceSTR
.
Пример заголовка UsesSequenceSTR
.
<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>
Композиция с сеансами SSL/TLS
WCF не поддерживает взаимодействие с сеансами SSL/TLS.
B2401: WCF не создает заголовок
wsrm:UsesSequenceSSL
.R2402: инициатор надежного обмена сообщениями не должен отправлять
CreateSequence
сообщение с заголовкомwsrm:UsesSequenceSSL
в ответ WCF.
Композиция с WS-Policy
WCF поддерживает две версии WS-Policy: WS-Policy 1.2 и WS-Policy 1.5.
WS-ReliableMessaging WS-Policy Утверждение
WCF использует WS-ReliableMessaging WS-Policy утверждение wsrm:RMAssertion
, чтобы описать возможности конечных точек. Ниже приведен список ограничений, которые применяются к WCF:
B3001: WCF присоединяет
wsrmn:RMAssertion
утверждения типа WS-Policy кwsdl:binding
элементам. WCF поддерживает вложения как к элементамwsdl:binding
, так иwsdl:port
.B3002: WCF никогда не создает
wsp:Optional
тег.B3003: При обращении к
wsrmp:RMAssertion
утверждению WS-Policy WCF игнорирует тегwsp:Optional
и рассматривает политику WS-RM как обязательную.R3004: Поскольку WCF не совмещается с сеансами SSL/TLS, WCF не принимает политику, указывающую
wsrmp:SequenceTransportSecurity
.B3005: WCF всегда создает
wsrmp:DeliveryAssurance
элемент.B3006: WCF всегда указывает гарантию
wsrmp:ExactlyOnce
доставки.B3007: WCF создает и считывает следующие свойства утверждения WS-ReliableMessaging и обеспечивает контроль над ними в WCF
ReliableSessionBindingElement
:netrmp:InactivityTimeout
netrmp:AcknowledgementInterval
Пример
RMAssertion
.<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>
Расширение WS-ReliableMessaging управления потоками
WCF использует WS-ReliableMessaging расширяемость, чтобы предоставить необязательный более жесткий контроль над потоком сообщений последовательности.
Управление потоком включается установкой свойства ReliableSessionBindingElement.FlowControlEnabled в значение true
. Ниже приведен список ограничений, которые применяются к WCF:
B4001: Если включено управление потоком надежных сообщений, WCF создает
netrm:BufferRemaining
элемент в расширяемости заголовкаSequenceAcknowledgement
, как показано в следующем примере.<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: даже если включено Управление Потоком Надежных Сообщений, WCF не требует элемента
netrm:BufferRemaining
в заголовкеSequenceAcknowledgement
.B4003: Адресат надежного обмена сообщениями WCF использует
netrm:BufferRemaining
для указания, сколько новых сообщений он может буферизовать.B4004:Если включен элемент управления потоком надежных сообщений, источник надежного обмена сообщениями WCF использует значение
netrm:BufferRemaining
для регулирования передачи сообщений.B4005: WCF создает
netrm:BufferRemaining
целые значения в диапазоне от 0 до 4096 включительно и считывает целые значения от 0 до значенияxs:int
maxInclusive
214748364 включительно.
Шаблоны Обмена сообщениями
В этом разделе описывается поведение WCF при использовании WS-ReliableMessaging для различных шаблонов Обмена сообщениями. Для каждого шаблона Обмена сообщениями рассматриваются следующие два сценария развертывания:
Неадресуемый инициатор: инициатор находится за брандмауэром; Ответчик может доставлять сообщения инициатору только в HTTP-ответах.
Адресный инициатор: инициатор и ответчик могут отправлять HTTP-запросы; другими словами, можно установить два обратных HTTP-подключения.
Однопутевая, неадресуемый инициатор
Привязка
WCF предоставляет шаблон обмена одностороннего сообщения с помощью одной последовательности по одному каналу HTTP. WCF использует HTTP-запросы для передачи всех сообщений от инициатора к ответчику и HTTP-ответы для передачи всех сообщений от ответчика к инициатору.
CreateSequence Exchange
Инициатор WCF передает CreateSequence
сообщение без элемента Offer
в HTTP-запросе и ожидает сообщение CreateSequenceResponse
в HTTP-ответе. Респондент WCF создает последовательность действий и передает сообщение CreateSequenceResponse
, не содержащая элемента Accept
в ответе HTTP.
Подтверждение Последовательности
Инициатор WCF обрабатывает подтверждения по ответу всех сообщений, кроме сообщения CreateSequence
и сообщений о сбое. Ответчик WCF всегда передает автономное подтверждение в HTTP-ответ на все последовательности и сообщения AckRequested
.
CloseSequence Exchange
Инициатор WCF передает CloseSequence
сообщение по HTTP-запросу и ожидает CreateSequenceResponse
сообщение в ответе HTTP. Модуль-приемник WCF передает сообщение CloseSequenceResponse
через HTTP-ответ.
Завершение последовательности обмена
Инициатор WCF передает TerminateSequence
сообщение по HTTP-запросу и ожидает TerminateSequenceResponse
сообщение в ответе HTTP. Модуль-приемник WCF передает сообщение TerminateSequenceResponse
через HTTP-ответ.
Однонаправленный адресуемый инициатор
Привязка
WCF предоставляет шаблон обмена одностороннего сообщения с помощью одной последовательности через один входящий и один исходящий HTTP-канал. WCF использует HTTP-запросы для передачи всех сообщений. Все ответы HTTP имеют пустой текст и код состояния HTTP 202.
CreateSequence Exchange
Инициатор WCF передает HTTP-запрос с CreateSequence
сообщением, но без элемента Offer
. Респондент WCF создает последовательность и передает CreateSequenceResponse
сообщение без Accept
элемента на HTTP-запросе.
Дуплексный, адресуемый инициатор
Привязка
WCF предоставляет полностью асинхронный двусторонний шаблон обмена сообщениями с помощью двух последовательностей по одному входящего и одного исходящего HTTP-канала. Этот шаблон обмена сообщениями можно ограниченным образом совместить с шаблоном обмена сообщениями инициатора Request/Reply
Addressable
. WCF использует HTTP-запросы для передачи всех сообщений. Все ответы HTTP имеют пустой текст и код состояния HTTP 202.
CreateSequence Exchange
Инициатор WCF передает сообщение CreateSequence
с элементом Offer
по HTTP-запросу. Компонент WCF гарантирует, что CreateSequence
содержит элемент Offer
, затем создает последовательность и передает сообщение CreateSequenceResponse
с элементом Accept
.
Время существования последовательности
WCF обрабатывает две последовательности как один полностью дуплексный сеанс.
При возникновении сбоя в одной последовательности, WCF ожидает, что удаленная конечная точка сгенерирует сбой в обеих последовательностях. При возникновении сбоя, который приводит к сбою одной последовательности, WCF вызывает сбой обеих последовательностей.
WCF может закрыть исходящую последовательность и продолжить обработку сообщений в входящей последовательности. И наоборот, WCF может обрабатывать закрытие входящей последовательности и продолжать отправлять сообщения в исходящей последовательности.
Request-Reply и односторонний, неадресуемый инициатор
Привязка
WCF предоставляет шаблоны обмена сообщениями: односторонний и запрос-ответ, используя две последовательности через один канал HTTP. WCF использует HTTP-запросы для передачи всех сообщений от инициатора к ответчику и HTTP-ответы для передачи всех сообщений от ответчика к инициатору.
CreateSequence Exchange
Инициатор WCF передает сообщение CreateSequence
с элементом Offer
в HTTP-запросе и ожидает сообщение CreateSequenceResponse
в HTTP-ответе. Ответчик WCF создаёт последовательность и передаёт CreateSequenceResponse
сообщение с элементом Accept
в HTTP-ответе.
Одностороннее сообщение
Для успешного завершения одностороннего обмена сообщениями инициатор WCF передает сообщение последовательности запросов по HTTP-запросу и получает автономное SequenceAcknowledgement
сообщение в ответе HTTP.
SequenceAcknowledgement
должно подтвердить переданное сообщение.
WCF Responder может ответить на запрос подтверждением, сбоем или ответом с пустым телом и кодом состояния HTTP 202.
Двустороннее сообщение
Для успешного выполнения протокола обмена сообщениями двумя способами инициатор WCF передает сообщение последовательности запросов по HTTP-запросу и получает сообщение последовательности ответа по HTTP-ответу. Ответ должен содержать SequenceAcknowledgement
, подтверждающее сообщение, передаваемое в последовательности запросов.
Компонент WCF может ответить на запрос, выдав ответное сообщение приложения, сообщение об ошибке или ответ с пустым телом и кодом состояния HTTP 202.
Из-за наличия односторонних сообщений и времени ответов приложения порядковый номер сообщения запроса и ответа не связаны друг с другом.
Повторная попытка ответов
WCF использует корреляцию HTTP-запроса-ответа для двусторонней корреляции протокола обмена сообщениями. Из-за этого инициатор WCF не прекращает попытки отправки запросов последовательности, когда сообщение последовательности запросов подтверждено, а прекращает, когда HTTP-ответ содержит SequenceAcknowledgement
, ответ приложения или ошибку. Средство ответа WCF повторно отправляет ответы по HTTP-ответу запроса, с которым соотносится ответ.
CloseSequence Exchange
Получив все ответные сообщения последовательности и подтверждения для всех однонаправленных сообщений последовательности запросов, инициатор WCF передает сообщение CloseSequence
для последовательности запросов по HTTP-запросу и ожидает HTTP-ответ с CloseSequenceResponse
.
Закрытие последовательности запросов неявно закрывает последовательность ответа. Это означает, что инициатор WCF включает окончательную SequenceAcknowledgement
последовательность ответа в CloseSequence
сообщении, а последовательность ответа не имеет CloseSequence
обмена.
Обработчик WCF гарантирует, что все ответы подтверждены и передает CloseSequenceResponse
сообщение в HTTP-ответе.
Завершение последовательности обмена
После получения CloseSequenceResponse
сообщения инициатор WCF передает TerminateSequence
сообщение для последовательности запросов HTTP и ожидает TerminateSequenceResponse
ответ HTTP.
CloseSequence
Как и в обмене, завершение последовательности запросов неявно завершает последовательность ответа. Это означает, что инициатор WCF включает окончательную SequenceAcknowledgement
последовательность ответа в TerminateSequence
сообщении, а последовательность ответа не имеет TerminateSequence
обмена.
Модуль-приемник WCF передает сообщение TerminateSequenceResponse
через HTTP-ответ.
Запрос/Ответ, адресуемый инициатор
Привязка
WCF предоставляет шаблон обмена сообщениями с запросами с помощью двух последовательностей через один входящий и один исходящий HTTP-канал. Этот шаблон обмена сообщениями можно смешать с шаблоном обмена сообщениями инициатора Duplex, Addressable
в ограниченной степени. WCF использует HTTP-запросы для передачи всех сообщений. Все ответы HTTP имеют пустой текст и код состояния HTTP 202.
CreateSequence Exchange
Инициатор WCF передает сообщение CreateSequence
с элементом Offer
по HTTP-запросу. WCF средство ответчика гарантирует, что CreateSequence
имеет элемент Offer
, затем создает последовательность и передает сообщение CreateSequenceResponse
с элементом Accept
.
Корреляция запросов и ответа
Ниже приведены все коррелированные запросы и ответы:
WCF гарантирует, что все сообщения запроса приложения содержат ссылку на конечную точку
ReplyTo
и ссылкуMessageId
.WCF применяет ссылку на локальную конечную точку для каждого сообщения запроса приложения
ReplyTo
. Ссылка на локальную конечную точку — этоCreateSequence
сообщениеReplyTo
для инициатора иCreateSequence
сообщенияTo
для ответа.WCF гарантирует, что входящие сообщения запроса содержат
MessageId
иReplyTo
.WCF гарантирует, что URI ссылки на конечную точку всех сообщений запроса приложения соответствуют
ReplyTo
ссылке на локальную конечную точку, как определено ранее.WCF гарантирует, что все ответы имеют правильные
RelatesTo
иTo
заголовки послеwsa
правил корреляции запросов и ответов.