Поделиться через


Протоколы транзакций версии 1.0

Windows Communication Foundation (WCF) версии 1 реализует протоколы WS-Atomic transaction и WS-Coordination версии 1.0. Дополнительные сведения о версии 1.1 см. в разделе "Протоколы транзакций".

Спецификация и документ Ссылка
WS-Coordination http://specs.xmlsoap.org/ws/2004/10/wscoor/wscoor.pdf
WS-AtomicTransaction http://specs.xmlsoap.org/ws/2004/10/wsat/wsat.pdf

Взаимодействие с этими спецификациями протокола требуется на двух уровнях: между приложениями и между диспетчерами транзакций (см. следующий рисунок). Спецификации подробно описывают форматы сообщений и обмен сообщениями для обоих уровней взаимодействия. Некоторые средства безопасности, надежности и кодировка для обмена приложениями применяются так же, как и для обычного обмена приложениями. Однако для успешного взаимодействия между диспетчерами транзакций требуется соглашение о конкретной привязке, так как оно обычно не настроено пользователем.

В этом разделе описывается спецификация транзакции WS-Atomic (WS-AT) с безопасностью и безопасная привязка, используемая для связи между диспетчерами транзакций. Описанный в этом документе подход успешно протестирован с другими реализациями WS-AT и WS-Coordination включая IBM, IONA, Sun Microsystems и другие.

На следующем рисунке показано взаимодействие между двумя диспетчерами транзакций, Transaction Manager 1 и Transaction Manager 2 и двумя приложениями, приложением 1 и приложением 2:

Снимок экрана: взаимодействие между диспетчерами транзакций.

Рассмотрим типичный сценарий WS-Координации/WS-Atomic транзакций с одним инициатором (I) и одним участником (P). Инициатор и участник имеют диспетчеры транзакций (ITM и PTM соответственно). Двухфазная фиксация называется 2PC в данном разделе.

  1. СоздатьКонтекстКоординации
  2. Ответ на запрос создания контекста координации
  3. Регистрация (завершение процесса)
  4. Ответ на регистрацию
  5. Сообщение приложения
  6. CreateCoordinationContext с контекстом
  7. Регистрация (долговечный)
  8. Ответ на регистрацию
  9. Ответ на запрос создания контекста координации
  10. Регистрация (долговечный)
  11. Ответ на регистрацию
  12. Ответ на сообщение приложения
  13. Закрепление (завершение)
  14. Подготовка (2PC)
  15. Подготовка (2PC)
  16. Подготовлен (2PC)
  17. Подготовлен (2PC)
  18. Завершено (выполнение)
  19. Подтверждение (2PC)
  20. Подтверждение (2PC)
  21. Зафиксировано (2PC)
  22. Зафиксировано (2PC)

В этом документе описывается композиция спецификации WS-AtomicTransaction с безопасностью и описывается безопасная привязка, используемая для обмена данными между диспетчерами транзакций. Метод, описанный в этом документе, успешно протестирован на совместимость с другими реализациями WS-AT и WS-Coordination.

На рисунке и таблице показаны четыре класса сообщений из точки зрения безопасности:

  • Сообщения активации (CreateCoordinationContext и CreateCoordinationContextResponse).

  • Сообщения регистрации ("Register" и "RegisterResponse")

  • Протоколные сообщения (подготовка, откат, фиксация, аборт и т. д.).

  • Сообщения приложения.

Первые три класса сообщений считаются сообщениями Диспетчера транзакций, а их конфигурация привязки описана далее в разделе "Обмен сообщениями приложений". Четвертый класс сообщений — это сообщения между приложениями, которые описаны в разделе "Примеры сообщений" позже в этой теме. В этом разделе описываются привязки протокола, используемые для каждого из этих классов WCF.

В этом документе используются следующие пространства имен XML и связанные префиксы.

Приставка Универсальный код ресурса (URI) пространства имен
s11 http://schemas.xmlsoap.org/soap/envelope
wsa http://www.w3.org/2004/08/addressing
wscoor http://schemas.xmlsoap.org/ws/2004/10/wscoor
wsat http://schemas.xmlsoap.org/ws/2004/10/wsat
t http://schemas.xmlsoap.org/ws/2005/02/trust
o http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd
xsd http://www.w3.org/2001/XMLSchema

Привязки менеджера транзакций

R1001. Диспетчеры транзакций должны использовать SOAP 1.1 и WS-Addressing 2004/08 для транзакций WS-Atomic и обмена сообщениями WS-Coordination.

Сообщения приложения не ограничены этими привязками и описаны далее.

Привязка HTTPS диспетчера транзакций

Привязка HTTPS диспетчера транзакций используется исключительно для обеспечения безопасности транспорта и установления доверия между каждой парой получателей отправителей в дереве транзакций.

Конфигурация транспорта HTTPS

Сертификаты X.509 используются для установки удостоверения Диспетчера транзакций. Требуется проверка подлинности клиента или сервера, а авторизация клиента или сервера остается в качестве сведений о реализации:

  • R1111: сертификаты X.509, представленные по проводу, должны иметь имя субъекта, соответствующее полному доменному имени (FQDN) исходного компьютера.

  • B1112: DNS должен быть функциональным между каждой парой отправитель-получатель в системе, чтобы проверки имени субъекта X.509 были успешны.

Настройка привязки активации и регистрации

WCF требует дуплексной привязки запроса и ответа с корреляцией по протоколу HTTPS. (Дополнительные сведения о корреляции и описаниях шаблонов обмена сообщениями запроса и ответа см. в разделе WS-Atomic Транзакция, раздел 8.)

Конфигурация привязки протокола 2PC

WCF поддерживает односторонние (датаграмма) сообщения по протоколу HTTPS. Корреляция между сообщениями оставляется как часть деталей реализации.

B2131: Реализации должны поддерживать wsa:ReferenceParameters в соответствии с описанным в WS-Addressing для согласования сообщений WCF 2PC.

Смешанная привязка безопасности менеджера транзакций

Это альтернативная (смешанный режим) привязка, которая использует транспортную безопасность в сочетании с моделью выданных маркеров WS-Coordination для целей создания удостоверений. Активация и регистрация являются единственными элементами, которые отличаются между двумя привязками.

Конфигурация транспорта HTTPS

Сертификаты X.509 используются для установки удостоверения Диспетчера транзакций. Требуется аутентификация клиента и сервера, а авторизация клиента и сервера остается на усмотрение реализации.

Конфигурация привязки сообщений активации

Сообщения активации обычно не участвуют в взаимодействии, так как обычно они происходят между приложением и локальным диспетчером транзакций.

B1221: WCF использует дуплексную привязку HTTPS (описанную в протоколах обмена сообщениями) для сообщений активации. Сообщения запроса и ответа коррелируются при помощи WS-Addressing 2004/08.

WS-Atomic спецификация транзакций, раздел 8, описывает дополнительные сведения о корреляции и шаблонах обмена сообщениями.

  • R1222: После получения CreateCoordinationContext Координатор должен выдать SecurityContextToken с связанным секретом STx. Этот токен возвращается внутри заголовка по спецификации WS-Trust, содержащей t:IssuedTokens.

  • Если активация выполняется в существующем контексте координации, то заголовок t:IssuedTokens, связанный с существующим контекстом, должен передаваться в сообщении SecurityContextToken.

Для присоединения к исходящему t:IssuedTokens сообщению необходимо создать новый wscoor:CreateCoordinationContextResponse заголовок.

Конфигурация привязки сообщений регистрации

B1231: WCF использует дуплексную привязку HTTPS (описанную в протоколах обмена сообщениями). Сообщения запроса и ответа коррелируются при помощи WS-Addressing 2004/08.

WS-AtomicTransaction, раздел 8, описывает дополнительные сведения о корреляции и описаниях шаблонов обмена сообщениями.

R1232. Исходящие wscoor:Register сообщения должны использовать режим проверки подлинности, описанный IssuedTokenOverTransport в протоколах безопасности.

Элемент wsse:Timestamp должен быть подписан при помощи выданного SecurityContextToken STx. Эта подпись является подтверждением владения маркером, связанным с конкретной транзакцией, и используется для проверки подлинности участника, зачисленного в транзакцию. Сообщение RegistrationResponse отправляется обратно по протоколу HTTPS.

Конфигурация привязки протокола 2PC

WCF поддерживает односторонние (датаграмма) сообщения по протоколу HTTPS. Корреляция между сообщениями оставляется как часть деталей реализации.

B2131: Реализации должны поддерживать wsa:ReferenceParameters в соответствии с описанным в WS-Addressing для согласования сообщений WCF 2PC.

Обмен сообщениями приложения

Приложения могут использовать любую конкретную привязку для сообщений приложений и приложений, если привязка соответствует следующим требованиям безопасности:

  • R2001: сообщения из приложения в приложение должны передавать t:IssuedTokens заголовок вместе с CoordinationContext заголовком сообщения.

  • R2002: целостность и конфиденциальность t:IssuedToken должны быть обеспечены.

Заголовок CoordinationContext содержит wscoor:Identifier. Хотя определение xsd:AnyURI позволяет использовать как абсолютные, так и относительные URI, WCF поддерживает только wscoor:Identifiersте, которые являются абсолютными URI.

Если wscoor:Identifierwscoor:CoordinationContext является относительным URI, то ошибки будут возвращены транзакционными службами WCF.

Примеры сообщений

Сообщения запроса и ответа CreateCoordinationContext

Следующие сообщения следуют шаблону запроса и ответа.

СоздатьКонтекстКоординации

<s:Envelope>  
  <s:Header>  
    <a:Action>http://.../ws/2004/10/wscoor/CreateCoordinationContext</Action>  
    <a:MessageID>urn:uuid:069f5104-fd88-4264-9f99-60032a82854e</MessageID>  
    <a:ReplyTo>  
      <Address>https://...</a:Address>  
    </a:ReplyTo>  
    <a:To>https://...</a:To>  
    <wsse:Security>  
      <u:Timestamp>  
        <wsu:Created>2005-12-15T23:36:09.921Z</wsu:Created>  
        <wsu:Expires>2005-12-15T23:41:09.921Z</wsu:Expires>  
      </u:Timestamp>  
    </wsse:Security>  
  </s:Header>  
  <s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">  
    <wscoor:CreateCoordinationContext>  
      <wscoor:CoordinationType>...</wscoor:CoordinationType>  
    </wscoor:CreateCoordinationContext>  
  </s:Body>  
</s:Envelope>  

Ответ на запрос создания контекста координации

<s:Envelope>  
  <!-- Data below is shown in the clear for  
       illustration purposes only. -->  
  <s:Header>  
    <a:Action>./ws/2004/10/wscoor/CreateCoordinationContextResponse </a:Action>  
    <a:RelatesTo>urn:uuid:069f5104-fd88-4264-9f99-60032a82854e</a:RelatesTo>  
    <a:To s:mustUnderstand="1">https://... </a:To>  
    <t:IssuedTokens>  
 <wst:RequestSecurityTokenResponse
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  
    xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust"  
    xmlns:wsc="http://schemas.xmlsoap.org/ws/2005/02/sc"  
    xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">  
    <wst:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</wst:TokenType>  
    <wst:RequestedSecurityToken>  
      <wsc:SecurityContextToken>  
        <wssu:Identifier>  
          http://fabrikam123.com/SCTi  
        </wssu:Identifier>  
      </wsc:SecurityContextToken>
    </wst:RequestedSecurityToken>  
    <wsp:AppliesTo>  
        http://fabrikam123.com/CCi  
    </wsp:AppliesTo>
    <wst:RequestedAttachedReference>  
      <wsse:SecurityTokenReference >  
        <wsse:Reference
           ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"  
           URI="http://fabrikam123.com/SCTi"/>  
      </wsse:SecurityTokenReference>  
    </wst:RequestedAttachedReference>  
    <wst:RequestedUnattachedReference>  
      <wsse:SecurityTokenReference>  
        <wsse:Reference
          ValueType="http://schemas.xmlsoap.org/ws/2005/02/sc/sct"  
          URI="http://fabrikam123.com/SCTi"/>  
      </wsse:SecurityTokenReference>  
    </wst:RequestedUnattachedReference>  
    <wst:RequestedProofToken>  
      <wst:BinarySecret
        Type="http://schemas.xmlsoap.org/ws/2005/02/trust/SymmetricKey">  
        <!-- base64 encoded value -->  
      </wst:BinarySecret>  
    </wst:RequestedProofToken>  
    <wst:Lifetime>  
      <wssu:Created>2005-10-24T20:19:26.526Z</wssu:Created>  
      <wssu:Expires>2005-10-25T06:24:26.526Z</wssu:Expires>  
    </wst:Lifetime>  
    <wst:KeySize>256</wst:KeySize>  
</wst:RequestSecurityTokenResponse>  
    </t:IssuedTokens>  
    <o:Security xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">  
      <u:Timestamp u:Id="_0">  
        <u:Created>2005-12-15T23:36:12.015Z</u:Created>  
        <u:Expires>2005-12-15T23:41:12.015Z</u:Expires>  
      </u:Timestamp>  
    </o:Security>  
  </s:Header>  
  <s:Body>  
    <wscoor:CreateCoordinationContextResponse>  
      <wscoor:CoordinationContext>  
        <wscoor:Identifier>  
     http://fabrikam123.com/CCi  
      </wscoor:Identifier>  
        <wscoor:Expires>...</wscoor:Expires>  
        <wscoor:CoordinationType>...</wscoor:CoordinationType>  
        <wscoor:RegistrationService>  
          <a:Address>https://...</a:Address>  
          <a:ReferenceParameters>  
             ...  
          </a:ReferenceParameters>  
        </wscoor:RegistrationService>  
      </wscoor:CoordinationContext>  
    </wscoor:CreateCoordinationContextResponse>  
  </s:Body>  
</s:Envelope>  

Сообщения о регистрации

Ниже перечислены сообщения о регистрации.

Регистрация

<s:Envelope>  
  <s:Header>  
    <a:Action>http://schemas.xmlsoap.org/ws/2004/10/wscoor/Register</a:Action>  
    <a:MessageID>urn:uuid:ed418b86-a75e-4aea-9d4e-a5d0cb5c088e</a:MessageID>  
    <a:ReplyTo>  
      <a:Address>https://...</a:Address>
    </a:ReplyTo>  
    <a:To>https://...</a:To>  
    <wsse:Security
      s:mustUnderstand="1"
      xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  
      xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">  
      <wssu:Timestamp wssu:Id="_0" >  
        <wssu:Created>2005-12-15T23:36:13.827Z</wssu:Created>  
        <wssu:Expires>2005-12-15T23:41:13.827Z</wssu:Expires>  
      </wssu:Timestamp>  
      <wsc:SecurityContextToken>  
      <wssu:Identifier>  
          http://fabrikam123.com/SCTi  
      </wssu:Identifier>  
      </wsc:SecurityContextToken>  
      <!-- supporting signature over the timestamp -->  
      <wsse:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">  
        <ds:SignedInfo>  
          <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>  
          <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#hmac-sha1"/>  
          <ds:Reference URI="#_0">  
            <ds:Transforms>  
              <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>  
            </ds:Transforms>  
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>  
            <ds:DigestValue>  
              alRzyhjLgoUOYoh8cx4n75eTcUk=  
            </ds:DigestValue>  
          </ds:Reference>  
        </ds:SignedInfo>  
        <ds:SignatureValue>YZYjnVvSOVasAQqQxaaviTSWtqI=</ds:SignatureValue>  
        <ds:KeyInfo>  
          <wsse:SecurityTokenReference  
            xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">  
            <wsse:Reference
              URI="http://fabrikam123.com/SCTi"/>  
          </wsse:SecurityTokenReference>  
        </ds:KeyInfo>  
      </wsse:Signature>  
    </wsse:Security>  
  </s:Header>  
  <s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">  
    <wscoor:Register>  
      <wscoor:ProtocolIdentifier>...</wscoor:ProtocolIdentifier>  
      <wscoor:ParticipantProtocolService>  
        <a:Address>https://... </a:Address>  
      </wscoor:ParticipantProtocolService>  
    </wscoor:Register>  
  </s:Body>  
</s:Envelope>  

Регистрация ответа

<s:Envelope>  
  <s:Header>  
    <a:Action>  
      http://schemas.xmlsoap.org/ws/2004/10/wscoor/RegisterResponse  
    </a:Action>  
    <a:MessageID>urn:uuid:ed418b86-a75e-4aea-9d4e-a5d0cb5c088d</a:MessageID>  
    <a:RelatesTo>  
      urn:uuid:ed418b86-a75e-4aea-9d4e-a5d0cb5c088e
    </a:RelatesTo>  
    <a:To>https://...</a:To>  
    <wsse:Security
      s:mustUnderstand="1"
      xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  
      xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">  
      <wssu:Timestamp>  
        <wssu:Created>2005-12-15T23:36:13.827Z</wssu:Created>  
        <wssu:Expires>2005-12-15T23:41:13.827Z</wssu:Expires>  
      </wssu:Timestamp>  
    </wsse:Security>  
  </s:Header>  
  <s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">  
    <wscoor:RegisterResponse>  
      <wscoor:CoordinatorProtocolService>  
        <a:Address>https://...</a:Address>  
        <a:ReferenceParameters>  
          ...  
        </a:ReferenceParameters>  
      </wscoor:CoordinatorProtocolService>  
    </wscoor:RegisterResponse>  
  </s:Body>  
</s:Envelope>  

Сообщения двухфазного протокола фиксации

Следующее сообщение относится к протоколу двухфазной фиксации (2PC, two-phase commit protocol).

Зафиксировать

<s:Envelope>  
  <s:Header>  
    <a:Action>http://.../ws/2004/10/wsat/Commit</a:Action>  
    <a:To>https://...</a:To>  
    <wsse:Security
      s:mustUnderstand="1"
      xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"  
      xmlns:wssu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">  
      <wssu:Timestamp wssu:Id="_0" >  
        <wssu:Created>2005-12-15T23:36:13.827Z</wssu:Created>  
        <wssu:Expires>2005-12-15T23:41:13.827Z</wssu:Expires>  
      </wssu:Timestamp>  
   </wsse:Security>  
  </s:Header>  
  <s:Body xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">  
    <wsat:Commit />  
  </s:Body>  
</s:Envelope>  

Сообщения приложения

Ниже перечислены сообщения приложения.

Сообщение приложения-запрос

<s:Envelope>  
  <s:Header>  
<!-- Addressing headers, all signed-->  
    <wsse:Security s:mustUnderstand="1">  
      <wssu:Timestamp wssu:Id="timestamp">
        <wssu:Created>2005-10-25T06:29:18.703Z</wssu:Created>  
        <wssu:Expires>2005-10-25T06:34:18.703Z</wssu:Expires>  
      </wssu:Timestamp>  
      <wsse:BinarySecurityToken
          wssu:Id="IA_Certificate"
          ValueType="...#X509v3"
          EncodingType="...#Base64Binary">  
        <!-- IA certificate -->  
      </wsse:BinarySecurityToken>  
      <e:EncryptedKey Id="encrypted_key">  
            <!-- ephemeral key encrypted for PA certificate -->
        <e:ReferenceList xmlns:e="http://www.w3.org/2001/04/xmlenc#">  
          <e:DataReference URI="#encrypted_body"/>  
          <e:DataReference URI="#encrypted_CCi"/>  
          <e:DataReference URI="#encrypted_issuedtokens"/>  
        </e:ReferenceList>  
      </e:EncryptedKey>  
      <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">  
        <!-- signature over Addressing headers, Timestamp, and Body -->  
      </Signature>  
    </wsse:Security>  
    <wsse11:EncryptedHeader>  
     <!-- encrypted wscoor:CoordinationContext header containing CCi -->  
    </wsse11:EncryptedHeader>  
    <wsse11:EncryptedHeader>
      <!-- encrypted wst:IssuedTokens header containing SCTi -->  
      <!-- wst:IssuedTokens header is taken verbatim from message #2 above, omitted for brevity -->  
    </wsse11:EncryptedHeader>  
  </s:Header>  
  <s:Body wssu:Id="body">  
    <!-- encrypted content of the Body element of the application message -->
    <e:EncryptedData Id="encrypted_body"
           Type="http://www.w3.org/2001/04/xmlenc#Content"
           xmlns:e="http://www.w3.org/2001/04/xmlenc#">  
...  
    </e:EncryptedData>  
  </s:Body>  
</s:Envelope>