Güvenilir Mesajlaşma Protokolü sürüm 1.1

Bu konu, HTTP aktarımı kullanılarak birlikte çalışma için gereken WS-ReliableMessaging Şubat 2007 (sürüm 1.1) protokolü için Windows Communication Foundation (WCF) uygulama ayrıntılarını kapsar. WCF, WS-ReliableMessaging belirtimini bu konuda açıklanan kısıtlamalar ve açıklamalar ile izler. WS-ReliableMessaging sürüm 1.1 protokollerinin .NET Framework 3.5'den başlayarak uygulandığını unutmayın.

WS-ReliableMessaging Şubat 2007 protokolü WCF'de tarafından ReliableSessionBindingElementuygulanır.

Kolaylık sağlamak için konu başlığı altında aşağıdaki roller kullanılır:

  • Başlatıcı: WS-Reliable Message dizisi oluşturma işlemini başlatan istemci.

  • Yanıtlayıcı: Başlatıcının isteklerini alan hizmet.

Bu belge aşağıdaki tabloda yer alan ön ekleri ve ad alanlarını kullanır.

Önek Ad Alanı
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 İlkesi 1.2 veya WS-policy 1.5)

Mesajlaşma

Sıra Oluşturma

WCF, CreateSequence güvenilir bir mesajlaşma dizisi oluşturmak için ve CreateSequenceResponse iletileri uygular. Aşağıdaki kısıtlamalar geçerlidir:

  • B1101: WCF Başlatıcısı, iletinin AcksToReplyTove Offer/Endpointile aynı uç nokta başvurularını CreateSequence kullanır.

  • R1102: AcksToİletideki CreateSequence , ReplyTo ve Offer/Endpoint uç nokta başvuruları, sekizlik temelliyle eşleşebilecek şekilde aynı dize gösterimlerine sahip adres değerlerine sahip olmalıdır.

    • WCF Yanıtlayıcısı, bir dizi oluşturmadan önce , ReplyTo ve Endpoint uç nokta başvurularının URI bölümünün AcksToaynı olduğunu doğrular.
  • R1103: AcksToİletideki CreateSequence ve Offer/EndpointReplyTo uç nokta başvuruları aynı başvuru parametreleri kümesine sahip olmalıdır.

    • WCF zorlamaz, ancak üzerindeki CreateSequence ve uç nokta başvurularının başvuru parametrelerinin AcksToReplyToOffer/Endpoint aynı olduğunu varsayar ve onaylar ve ters sıralı iletiler için uç nokta başvurusundan ReplyTo başvuru parametrelerini kullanır.
  • B1104: WCF Başlatıcısı, iletide CreateSequence isteğe bağlı Expires veya Offer/Expires öğesini oluşturmaz.

  • B1105: İletiye CreateSequence erişirken, WCF Yanıtlayıcısı öğesindeki CreateSequence değeri öğesindeki CreateSequenceResponse değer olarak Expires kullanırExpires. Aksi takdirde, WCF Yanıtlayıcısı ve Offer/Expires değerlerini okur ve yoksayarExpires.

  • B1106: İletiye CreateSequenceResponse erişirken, WCF Başlatıcısı isteğe bağlı Expires değeri okur ancak kullanmaz.

  • B1107: WCF Başlatıcısı ve Yanıtlayıcı her zaman ve CreateSequenceResponse öğelerinde CreateSequence/Offer isteğe bağlı IncompleteSequenceBehavior öğe oluşturur.

  • B1108: WCF yalnızca öğesindeki DiscardFollowingFirstGapIncompleteSequenceBehavior ve NoDiscard değerlerini kullanır.

    • WS-ReliableMessaging, bir oturumu oluşturan iki bağıntılı diziyi oluşturmak için mekanizmayı kullanır Offer .
  • B1109: Bir öğe içeriyorsaCreateSequence, WCF Yanıtlayıcısı'nın bir öğesiz Accept yanıt CreateSequenceResponse vererek sunulan sırayı reddetmesinin tek yoludur.Offer

  • B1110: Reliable Messaging Yanıtlayıcısı sunulan sırayı reddederse, WCF Başlatıcısı yeni oluşturulan dizide hata verir.

  • B1111: Bir Offer öğe içermiyorsaCreateSequence, iki yönlü WCF Yanıtlayıcısı bir CreateSequenceRefused hatayla yanıt vererek sunulan sırayı reddeder.

  • R1112: Mekanizma kullanılarak Offer iki ters dizi oluşturulduğunda, [address] uç nokta başvurusunun CreateSequenceResponse/Accept/AcksTo özelliği bayt için ileti baytının CreateSequence hedef URI'sine uymalıdır.

  • R1113: Mekanizma kullanılarak Offer iki ters dizi oluşturulduğunda, başlatıcıdan Yanıtlayıcı'ya akan her iki dizideki tüm iletiler aynı uç nokta başvurusuna gönderilmelidir.

WCF, Initiator ile Yanıtlayıcı arasında güvenilir oturumlar oluşturmak için WS-ReliableMessaging kullanır. WCF WS-ReliableMessaging uygulaması tek yönlü, istek-yanıt ve tam çift yönlü mesajlaşma desenleri için güvenilir bir oturum sağlar. WS-ReliableMessaging Offer mekanizması üzerindedir CreateSequence ve CreateSequenceResponse bağıntılı iki ters dizi oluşturmanıza olanak tanır ve tüm ileti uç noktaları için uygun bir oturum protokolü sağlar. WCF, oturum bütünlüğü için uçtan uca koruma da dahil olmak üzere böyle bir oturum için güvenlik garantisi sağladığından, aynı tarafa yönelik iletilerin aynı hedefe ulaştığından emin olmak pratiktir. Bu, uygulama iletilerinde sıralı onayların "piggy-backing" özelliğine de olanak tanır. Bu nedenle, R1102, R1112 ve R1113 kısıtlamaları WCF için geçerlidir.

İleti örneği 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>

İleti örneği 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>

Sırayı Kapatma

WCF, Güvenilir Mesajlaşma kaynağı tarafından başlatılan kapatma için ve CloseSequenceResponse iletilerini kullanırCloseSequence. WCF Reliable Messaging hedefi kapatmayı başlatmaz ve WCF Reliable Messaging kaynağı Reliable Messaging hedef tarafından başlatılan kapatmayı desteklemez. Aşağıdaki kısıtlamalar geçerlidir:

  • B1201: WCF Reliable Messaging kaynağı her zaman diziyi kapatmak için bir CloseSequence ileti gönderir.

  • B1202: Reliable Messaging kaynağı, iletiyi göndermeden önce dizi iletilerin tamamının onaylanmasını CloseSequence bekler.

  • B1203: Dizide ileti yoksa Reliable Messaging kaynağı her zaman isteğe bağlı LastMsgNumber öğeyi içerir.

  • R1204: Reliable Messaging hedefi, bir CloseSequence ileti göndererek kapatmayı başlatmamalıdır.

  • B1205: Bir CloseSequence ileti aldıktan sonra, WCF Reliable Messaging kaynağı sıranın tamamlanmamış olduğunu düşünür ve bir hata gönderir.

İleti örneği 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>

Örnek CloseSequenceResponse ileti:

<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>

Sıralı Sonlandırma

WCF, el sıkışmayı TerminateSequence/TerminateSequenceResponse tamamladıktan sonra öncelikle el sıkışmayı CloseSequence/CloseSequenceResponse kullanır. WCF Reliable Messaging hedefi sonlandırmayı başlatmaz ve Reliable Messaging kaynağı Reliable Messaging hedef tarafından başlatılan sonlandırmayı desteklemez. Aşağıdaki kısıtlamalar geçerlidir:

  • B1301: WCF Başlatıcısı yalnızca el sıkışması TerminateSequence başarıyla tamamlandıktan CloseSequence/CloseSequenceResponse sonra iletiyi gönderir.

  • R1302: WCF, öğenin belirli bir dizi için tüm CloseSequence ve TerminateSequence iletiler arasında tutarlı olduğunu doğrularLastMsgNumber. Bu, hem tüm CloseSequenceTerminateSequence iletilerde hem de iletilerde mevcut olmadığı veya tümü CloseSequenceTerminateSequence ve iletilerde aynı olduğu anlamına gelirLastMsgNumber.

  • B1303: El sıkışması sonrasında CloseSequence/CloseSequenceResponse bir TerminateSequence ileti alındığında Reliable Messaging hedefi bir TerminateSequenceResponse iletiyle yanıt verir. Reliable Messaging kaynağı iletiyi göndermeden TerminateSequence önce son onaya sahip olduğundan, Reliable Messaging hedefi şüphesiz sıranın sona erdiğini bilir ve kaynakları hemen geri alır.

  • B1304: El sıkışmadan CloseSequence/CloseSequenceResponse önce bir TerminateSequence ileti alındığında, WCF Reliable Messaging hedefi bir TerminateSequenceResponse iletiyle yanıt verir. Reliable Messaging hedefi, dizide tutarsızlık olmadığını belirlerse, Reliable Messaging hedefi, istemcinin son onayı alma şansını elde etmek için kaynakları geri kazanmadan önce uygulama hedefi tarafından belirtilen süreyi bekler. Aksi takdirde Reliable Messaging hedefi kaynakları hemen geri alır ve uygulama hedefine olayı yükselterek Faulted dizinin şüpheyle sona erdiğini gösterir.

İleti örneği 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>

Örnek TerminateSequenceResponse ileti:

<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>

Sıralamalar

Sıralara uygulanan kısıtlamaların listesi aşağıdadır:

  • B1401:WCF, 'nin en büyük kapsayıcı değeri olan 9223372036854775807'den xs:longyüksek olmayan sıra numaraları oluşturur ve bu sayılara erişir.

Üst bilgi örneği Sequence .

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

Onay İste

WCF, üst bilgiyi canlı tutma mekanizması olarak kullanır AckRequested .

Üst bilgi örneği AckRequested .

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

SequenceAcknowledgement

WCF, WS-Reliable Messaging'te sağlanan sıralı onaylar için bir "piggy-back" mekanizması kullanır. Aşağıdaki kısıtlamalar geçerlidir:

  • R1601: Mekanizma kullanılarak Offer iki ters dizi oluşturulduğunda, üst bilgi istenen SequenceAcknowledgement alıcıya iletilen herhangi bir uygulama iletisine eklenebilir. Uzak uç noktanın bir piggybacked üst bilgisine erişebilmesi SequenceAcknowledgement gerekir.

  • B1602: WCF öğeleri içeren Nack üst bilgiler oluşturmazSequenceAcknowledgement. WCF, her Nack öğenin bir sıra numarası içerdiğini doğrular, ancak aksi takdirde öğeyi Nack ve değeri yoksayar.

Üst bilgi örneği 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 Hataları

Aşağıda WS-ReliableMessaging hatalarının WCF uygulamasına uygulanan kısıtlamaların listesi yer alır. Aşağıdaki kısıtlamalar geçerlidir:

  • B1701: WCF hata oluşturmaz MessageNumberRollover .

  • B1702: SOAP 1.2 üzerinden, hizmet uç noktası bağlantı sınırına ulaştığında ve yeni bağlantıları işleyemediğinde, WCF aşağıdaki örnekte gösterildiği gibi iç içe CreateSequenceRefused geçmiş bir hata alt kodu netrm:ConnectionLimitReachedoluşturur.

<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-Adresleme Hataları

WS-ReliableMessaging WS-Addressing kullandığından, WCF WS-ReliableMessaging uygulaması WS-Addressing hataları oluşturabilir ve iletebilir. Bu bölüm, WCF'nin WS-ReliableMessaging katmanında açıkça oluşturduğu ve ilettiği WS-Addressing hatalarını kapsar:

  • B1801:WCF, aşağıdakilerden biri doğru olduğunda hatayı oluşturur ve iletir Message Addressing Header Required :

    • bir CreateSequenceveya CloseSequenceTerminateSequence iletisinde üst MessageId bilgi eksik.

    • bir CreateSequenceveya CloseSequenceTerminateSequence iletisinde üst ReplyTo bilgi eksik.

    • Bir CreateSequenceResponse, CloseSequenceResponseveya TerminateSequenceResponse iletisinde üst RelatesTo bilgi eksik.

  • B1802:WCF, iletideki Endpoint Unavailable adresleme üst bilgilerinin CreateSequence incelenmesine göre sırayı işleyebilen bir uç noktanın dinleme olmadığını belirtmek için hatayı oluşturur ve iletir.

Protokol Oluşturma

WS Adresleme ile Oluşturma

WCF iki WS-Addressing sürümünü destekler: WS-Addressing 2004/08 [WS-ADDR] ve W3C WS-Addressing 1.0 Öneriler [WS-ADDR-CORE] ve [WS-ADDR-SOAP].

WS-ReliableMessaging belirtimi yalnızca WS-Addressing 2004/08'den bahsederken, WS-Addressing sürümünün kullanılmasını kısıtlamaz. WCF için geçerli olan kısıtlamaların listesi aşağıdadır:

  • R2101: WS-Addressing 2004/08 ve WS-Addressing 1.0, WS-Reliable Messaging ile kullanılabilir.

  • R2102: Belirli bir WS-ReliableMessaging dizisi veya mekanizma kullanılarak Offer bağıntılı bir çift ters dizi boyunca tek bir WS-Addressing sürümü kullanılmalıdır.

SOAP ile kompozisyon

WCF, WS-Reliable Messaging ile hem SOAP 1.1 hem de SOAP 1.2 kullanımını destekler.

WS-Security ve WS-SecureConversation ile Oluşturma

WCF, güvenli Aktarım (HTTPS), WS-Security ile oluşturma ve WS-Secure Konuşma ile oluşturma kullanarak WS-ReliableMessaging dizileri için koruma sağlar. WS-ReliableMessaging 1.1 protokolü, WS-Security 1.1 ve WS-Secure Conversation 1.3 protokolü birlikte kullanılmalıdır. WCF için geçerli olan kısıtlamaların listesi aşağıdadır:

  • R2301: Tek tek iletilerin bütünlüğüne ve gizliliğine ek olarak WS-ReliableMessaging dizisinin bütünlüğünü korumak için WCF, WS-Secure Konuşmanın kullanılması gerekir.

  • WS-ReliableMessaging dizileri oluşturulmadan önce R2302:AWS-Secure Konuşma oturumu oluşturulmalıdır.

  • R2303: WS-ReliableMessaging dizisinin ömrü WS-Secure Konuşma oturumunun ömrünü aşarsa, SecurityContextToken WS-Secure Konuşma kullanılarak kurulan, ilgili WS-Secure Konuşma Yenileme bağlaması kullanılarak yenilenmelidir.

  • B2304:WS-ReliableMessaging dizisi veya bir çift bağıntılı ters dizi her zaman tek bir WS-SecureConversation oturumuna bağlıdır.

  • R2305: WS-Secure Konuşma ile oluşturulduğunda, WCF yanıtlayıcısı iletinin CreateSequence öğesini ve üst bilgiyi içermesini wsse:SecurityTokenReferencewsrm:UsesSequenceSTR gerektirir.

Üst bilgi örneği UsesSequenceSTR .

<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>

SSL/TLS oturumlarıyla oluşturma

WCF, SSL/TLS oturumlarıyla bileşimi desteklemez:

  • B2401: WCF üst bilgi oluşturmaz wsrm:UsesSequenceSSL .

  • R2402: Reliable Messaging Başlatıcısı, WCF Yanıtlayıcısı'na üst bilgi içeren bir wsrm:UsesSequenceSSL ileti göndermemelidirCreateSequence.

WS İlkesi ile oluşturma

WCF, WS İlkesi'nin iki sürümünü destekler: WS-policy 1.2 ve WS-Policy 1.5.

WS-ReliableMessaging WS-Policy Assertion

WCF, uç nokta özelliklerini açıklamak için WS-ReliableMessaging WS-Policy Assertion wsrm:RMAssertion kullanır. WCF için geçerli olan kısıtlamaların listesi aşağıdadır:

  • B3001: WCF, öğelere WS-Policy Assertion ekler wsrmn:RMAssertionwsdl:binding . WCF hem ekleri wsdl:binding hem wsdl:port de öğelerini destekler.

  • B3002: WCF hiçbir zaman etiketi oluşturmaz wsp:Optional .

  • B3003: WS-Policy Assertion'a erişirken wsrmp:RMAssertion , WCF etiketi yoksayar wsp:Optional ve WS-RM ilkesini zorunlu olarak ele alır.

  • R3004: WCF SSL/TLS oturumlarıyla oluşturmadığından, WCF belirten wsrmp:SequenceTransportSecurityilkeyi kabul etmez.

  • B3005: WCF her zaman öğesini oluşturur wsrmp:DeliveryAssurance .

  • B3006: WCF her zaman teslim güvencesini wsrmp:ExactlyOnce belirtir.

  • B3007: WCF, WS-ReliableMessaging onayının aşağıdaki özelliklerini oluşturur ve okur ve WCFReliableSessionBindingElement üzerinde bunlar üzerinde denetim sağlar:

    • netrmp:InactivityTimeout

    • netrmp:AcknowledgementInterval

    örneği 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>
    

Akış Denetimi WS-ReliableMessaging Uzantısı

WCF, sıralı ileti akışı üzerinde isteğe bağlı ek daha sıkı denetim sağlamak için WS-ReliableMessaging genişletilebilirliğini kullanır.

Akış denetimi özelliği trueolarak ayarlanarak ReliableSessionBindingElement.FlowControlEnabled etkinleştirilir. WCF için geçerli olan kısıtlamaların listesi aşağıdadır:

  • B4001: Reliable Messaging Flow Control etkinleştirildiğinde, WCF aşağıdaki örnekte gösterildiği gibi üst bilginin genişletilebilirlik SequenceAcknowledgement öğesinde bir netrm:BufferRemaining öğe oluşturur.

    <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: Reliable Messaging Flow Control etkinleştirildiğinde bile WCF üst bilgide SequenceAcknowledgement bir netrm:BufferRemaining öğe gerektirmez.

  • B4003: WCF Reliable Messaging Destination, arabelleğe alınabilecek yeni ileti sayısını belirtmek için kullanır netrm:BufferRemaining .

  • B4004:Reliable Messaging Flow Control etkinleştirildiğinde WCF Reliable Messaging Source, ileti iletimini kısıtlamak için değerini netrm:BufferRemaining kullanır.

  • B4005: WCF, 0 ile 4096 (dahil) arasında tamsayı değerleri oluşturur netrm:BufferRemaining ve 0 ile xs:int'nin maxInclusive değeri 214748364 dahil olmak üzere tamsayı değerlerini okur.

İleti Değişimi Desenleri

Bu bölümde, WS-ReliableMessaging farklı İleti Değişimi Desenleri için kullanıldığında WCF'nin davranışı açıklanmaktadır. Her İleti Değişimi Düzeni için aşağıdaki iki dağıtım senaryosu dikkate alınır:

  • Adreslenemeyen Başlatıcı: Başlatıcı bir güvenlik duvarının arkasındadır; Yanıtlayıcı, iletileri başlatıcıya yalnızca HTTP yanıtlarında teslim edebilir.

  • Adreslenebilir Başlatıcı: Başlatıcı ve Yanıtlayıcı http istekleri gönderilebilir; başka bir deyişle, iki ters HTTP bağlantısı kurulabilir.

Tek yönlü, Adreslenemeyen Başlatıcı

Bağlama

WCF, bir HTTP kanalı üzerinden tek bir sıra kullanarak tek yönlü bir ileti değişimi düzeni sağlar. WCF, Başlatıcıdaki tüm iletileri Yanıtlayıcı'dan Başlatıcıya ve HTTP yanıtlayıcıya iletmek için HTTP isteklerini kullanır.

CreateSequence Exchange

WCF Başlatıcısı, BIR HTTP isteğinde öğesi olmayan Offer bir CreateSequence ileti iletir ve iletiyi HTTP yanıtında beklerCreateSequenceResponse. WCF Yanıtlayıcısı bir dizi oluşturur ve http yanıt üzerinde öğe olmadan Accept iletiyi iletirCreateSequenceResponse.

SequenceAcknowledgement

WCF Başlatıcısı, ileti ve hata iletileri dışındaki tüm iletilerin yanıtlanmasıyla CreateSequence ilgili onayları işler. WCF Yanıtlayıcısı, HTTP yanıtını her zaman tüm dizilere ve AckRequested iletilere tek başına bir onay iletir.

CloseSequence Exchange

WCF Başlatıcısı bir HTTP isteğinde bir CloseSequence ileti iletir ve iletiyi HTTP yanıtında bekler CreateSequenceResponse . WCF Yanıtlayıcısı iletiyi HTTP yanıtına iletir CloseSequenceResponse .

TerminateSequence Exchange

WCF Başlatıcısı bir HTTP isteğinde bir TerminateSequence ileti iletir ve iletiyi HTTP yanıtında bekler TerminateSequenceResponse . WCF Yanıtlayıcısı iletiyi HTTP yanıtına iletir TerminateSequenceResponse .

Tek Yönlü, Adreslenebilir Başlatıcı

Bağlama

WCF, bir gelen ve bir giden HTTP kanalı üzerinden bir sıra kullanarak tek yönlü bir ileti değişimi düzeni sağlar. WCF, tüm iletileri iletmek için HTTP isteklerini kullanır. Tüm HTTP yanıtları boş bir gövdeye ve HTTP 202 durum koduna sahiptir.

CreateSequence Exchange

WCF Başlatıcısı, CreateSequence HTTP isteğinde öğesi olmayan Offer bir ileti iletir. WCF Yanıtlayıcısı bir dizi oluşturur ve http isteğinde CreateSequenceResponse öğesi olmayan Accept iletiyi iletir.

Çift yönlü, Adreslenebilir Başlatıcı

Bağlama

WCF, bir gelen ve bir giden HTTP kanalı üzerinden iki dizi kullanarak tam olarak zaman uyumsuz, iki yönlü bir ileti değişimi düzeni sağlar. Bu ileti değişimi deseni, , Addressable Başlatıcı ileti değişimi deseni ile Request/Replysınırlı bir şekilde karıştırılabilir. WCF, tüm iletileri iletmek için HTTP isteklerini kullanır. Tüm HTTP yanıtları boş bir gövdeye ve HTTP 202 durum koduna sahiptir.

CreateSequence Exchange

WCF Başlatıcısı, HTTP CreateSequence isteğindeki bir Offer öğeyle bir ileti iletir. WCF Yanıtlayıcısı öğesinin bir Offer öğesi olduğundan CreateSequence emin olur, ardından bir dizi oluşturur ve iletiyi bir Accept öğeyle iletirCreateSequenceResponse.

Sıra Ömrü

WCF, iki diziyi tam çift yönlü bir oturum olarak ele alır.

Tek bir sırayı hataya neden olan bir hata oluşturduktan sonra, WCF uzak uç noktanın her iki sırayı da hataya ayırmasını bekler. Tek bir sırayı hataya neden olan bir hatayı okuduktan sonra WCF her iki sırayı da hataya neden olur.

WCF giden sırasını kapatabilir ve gelen dizisinde iletileri işlemeye devam edebilir. Buna karşılık, WCF gelen sıranın kapanışını işleyebilir ve giden dizisinde ileti göndermeye devam edebilir.

İstek-Yanıt ve Tek Yönlü, Adreslenemeyen Başlatıcı

Bağlama

WCF, bir HTTP kanalı üzerinden iki dizi kullanarak tek yönlü ve istek-yanıt iletisi değişim düzeni sağlar. WCF, Başlatıcıdaki tüm iletileri Yanıtlayıcı'dan Başlatıcıya ve HTTP yanıtlayıcıya iletmek için HTTP isteklerini kullanır.

CreateSequence Exchange

WCF Başlatıcısı, bir CreateSequence HTTP isteğinde bir öğe içeren bir Offer ileti iletir ve iletiyi HTTP yanıtında bekler CreateSequenceResponse . WCF Yanıtlayıcısı bir dizi oluşturur ve iletiyi HTTP yanıt üzerindeki bir Accept öğeyle iletirCreateSequenceResponse.

Tek Yönlü İleti

Tek yönlü ileti değişimini başarıyla tamamlamak için WCF Başlatıcısı HTTP isteğinde bir istek dizisi iletisi iletir ve HTTP yanıtında tek başına SequenceAcknowledgement bir ileti alır. , SequenceAcknowledgement iletilen iletiyi kabul etmelidir.

WCF Yanıtlayıcısı isteği bir onay, hata veya boş bir gövde ve HTTP 202 durum koduyla yanıtlayabilir.

İki Yönlü İletiler

İki yönlü ileti değişim protokollerini başarıyla tamamlamak için, WCF Başlatıcısı HTTP isteğinde bir istek dizisi iletisi iletir ve HTTP yanıtında bir yanıt dizisi iletisi alır. Yanıt, iletilen istek dizisi iletisini onaylayıcı bir SequenceAcknowledgement taşımalıdır.

WCF Yanıtlayıcısı isteği bir uygulama yanıtı, bir hata veya boş gövdeli bir yanıt ve HTTP 202 durum koduyla yanıtlayabilir.

Tek yönlü iletilerin varlığı ve uygulama yanıtlarının zamanlaması nedeniyle, istek dizisi iletisinin sıra numarası ile yanıt iletisinin sıra numarası arasında bağıntı yoktur.

Yanıtları Yeniden Deneme

WCF, iki yönlü ileti değişim protokolü bağıntısı için HTTP istek-yanıt bağıntısını kullanır. Bu nedenle, WCF Başlatıcısı istek dizisi iletisi onaylandığında değil, HTTP yanıtı bir , uygulama yanıtı veya hata taşıdığında istek SequenceAcknowledgementdizisi iletisini yeniden denemeyi durdurmaz. WCF Yanıtlayıcısı, yanıtın bağıntılı olduğu isteğin HTTP yanıtında yanıtları yeniden dener.

CloseSequence Exchange

Tüm tek yönlü istek dizisi iletileri için tüm yanıt dizisi iletilerini ve onaylarını aldıktan sonra, WCF Başlatıcısı bir HTTP isteğinde istek dizisi için bir CloseSequence ileti iletir ve HTTP yanıtında öğesini CloseSequenceResponse bekler.

İstek sırasının kapatılması, yanıt dizisini örtük olarak kapatır. Bu, WCF Başlatıcısı'nın iletide yanıt dizisinin Son'unu SequenceAcknowledgementCloseSequence içerdiği ve yanıt dizisinin bir CloseSequence değişimi olmadığı anlamına gelir.

WCF Yanıtlayıcısı tüm yanıtların kabul edilmesini sağlar ve iletiyi HTTP yanıtına iletir CloseSequenceResponse .

TerminateSequence Exchange

İletiyi CloseSequenceResponse aldıktan sonra, WCF Başlatıcısı bir HTTP isteğinde istek dizisi için bir TerminateSequence ileti iletir ve HTTP yanıtında öğesini TerminateSequenceResponse bekler.

Değişimde olduğu CloseSequence gibi, istek dizisinin sonlandırılması da yanıt dizisini örtük olarak sonlandırır. Bu, WCF Başlatıcısı'nın iletide yanıt dizisinin sonunu SequenceAcknowledgementTerminateSequence içerdiği ve yanıt dizisinin bir TerminateSequence değişimi olmadığı anlamına gelir.

WCF Yanıtlayıcısı iletiyi HTTP yanıtına iletir TerminateSequenceResponse .

İstek/Yanıt, Adreslenebilir Başlatıcı

Bağlama

WCF, bir gelen ve bir giden HTTP kanalı üzerinden iki dizi kullanan bir istek-yanıt iletisi değişim düzeni sağlar. Bu ileti değişimi düzeni, Başlatıcı ileti değişimi deseniyle sınırlı bir şekilde karıştırılabilir Duplex, Addressable . WCF, tüm iletileri iletmek için HTTP isteklerini kullanır. Tüm HTTP yanıtları boş bir gövdeye ve HTTP 202 durum koduna sahiptir.

CreateSequence Exchange

WCF Başlatıcısı, HTTP CreateSequence isteğindeki bir Offer öğeyle bir ileti iletir. WCF Yanıtlayıcı bir öğeye CreateSequence sahip Offer olduğundan emin olur, ardından bir dizi oluşturur ve iletiyi bir Accept öğeyle iletirCreateSequenceResponse.

İstek/Yanıt Bağıntısı

Aşağıdakiler tüm bağıntılı istekler ve yanıtlar için geçerlidir:

  • WCF, tüm uygulama isteği iletilerinin bir ReplyTo uç nokta başvurusu ve bir MessageIdolmasını sağlar.

  • WCF, her uygulama isteği iletisinin olarak yerel uç nokta başvurusunu ReplyTouygular. Yerel uç nokta başvurusu, iletinin CreateSequenceReplyTo Başlatıcı için ve iletinin CreateSequence Yanıtlayıcı için olmasıdır To .

  • WCF, gelen istek iletilerinin ve MessageIdReplyTodeğerlerinin olmasını sağlar.

  • WCF, tüm uygulama isteği iletilerinin ReplyTo uç nokta başvurusunun URI'sinin daha önce tanımlandığı gibi yerel uç nokta başvurusuyla eşleşmesini sağlar.

  • WCF, istek/yanıt bağıntı kurallarını izleyen wsa tüm yanıtların doğru RelatesTo ve To üst bilgileri taşımasını sağlar.