Aracılığıyla paylaş


Reliable Messaging Protocol sürüm 1.1

Bu konu, HTTP aktarımını kullanarak 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, bu konuda açıklanan kısıtlamalar ve açıklamalar ile WS-ReliableMessaging belirtimini 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ü, ReliableSessionBindingElement tarafından WCF'de uygulanır.

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

  • Başlatıcı: WS-Reliable İleti 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 Namespace
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 veya WS-Policy 1.5)

Mesajlaşma

Sıra Oluşturma

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

  • B1101: WCF Başlatıcısı, iletinin CreateSequence, ReplyTo, AcksTo ve Offer/Endpoint ile aynı uç nokta başvurularını kullanır.

  • R1102: AcksTo, ReplyTo ve Offer/Endpoint uç nokta başvuruları, CreateSequence iletisindeki adres değerlerinin, sekizlik bazında tam olarak eşleşecek şekilde aynı dize gösterimleri ile belirtilmiş olması gerekmektedir.

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

    • WCF zorlamaz, ancak AcksTo üzerindeki uç nokta başvurularının ReplyTo, Offer/Endpoint ve CreateSequence ile aynı olduğunu varsayar ve ReplyTo uç nokta başvurusundaki başvuru parametrelerini onaylar ve ters dizili iletiler için kullanır.
  • B1104: WCF Başlatıcısı, Expires iletisinde isteğe bağlı Offer/Expires veya CreateSequence öğesini üretmez.

  • B1105: CreateSequence iletisine erişirken, WCF Yanıtlayıcısı, Expires öğesindeki CreateSequence değerini, Expires öğesindeki CreateSequenceResponse değeri olarak kullanır. Aksi takdirde, WCF Yanıtlayıcısı Expires ve Offer/Expires değerlerini okur ve yoksayar.

  • 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 IncompleteSequenceBehavior ve CreateSequence/Offer öğelerinde isteğe bağlı CreateSequenceResponse öğesini oluşturur.

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

    • WS-ReliableMessaging, bir oturumu oluşturan iki karşıt ve bağıntılı diziyi oluşturmak için Offer mekanizmasını kullanır.
  • B1109: Eğer CreateSequence bir Offer öğesi içeriyorsa, WCF Yanıtlayıcısı'nın, bir CreateSequenceResponse öğesi olmadan Accept ile yanıt vererek sunulan sırayı reddetmesinin tek yolu budur.

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

  • B1111: Bir CreateSequence öğe içermiyorsaOffer, 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, Başlatıcı 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. Offer ve CreateSequence üzerindeki WS-ReliableMessaging CreateSequenceResponse mekanizması, iki bağıntılı ters diziyi 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ıra onaylarının ek olarak gönderilmesine de olanak tanır. Bu nedenle, R1102, R1112 ve R1113 kısıtlamaları WCF için geçerlidir.

Bir ileti ö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>

Bir ileti ö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 CloseSequence ve CloseSequenceResponse iletilerini kullanır. WCF Reliable Messaging hedefi kapatma işlemini başlatmaz ve WCF Reliable Messaging kaynağı, Reliable Messaging hedef tarafından başlatılan kapatma işlemini desteklemediğini belirtir. 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ğı, CloseSequence mesajını göndermeden önce tüm dizi iletilerinin onaylanmasını bekler.

  • B1203: Dizide ileti olmadıkça, Reliable Messaging kaynağı her zaman isteğe bağlı LastMsgNumber öğesini 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.

Bir ileti ö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>

Dizi Sonlandırma

WCF, TerminateSequence/TerminateSequenceResponse el sıkışmasını tamamladıktan sonra esas olarak CloseSequence/CloseSequenceResponse el sıkışma protokolünü kullanır. WCF Reliable Messaging hedefi sonlandırma başlatmaz ve Reliable Messaging kaynağı, Reliable Messaging hedefi 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, belirli bir dizi için LastMsgNumber öğesinin tüm CloseSequence ve TerminateSequence iletiler arasında tutarlı olduğunu doğrular. Bu, LastMsgNumber'ün ya tüm CloseSequence ve TerminateSequence iletilerde mevcut olmadığı ya da tüm CloseSequence ve TerminateSequence iletilerde mevcut olup aynı olduğu anlamına gelir.

  • B1303: El sıkışması sonrasında TerminateSequence bir CloseSequence/CloseSequenceResponse ileti alındığında Güvenilir Mesajlaşma 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 TerminateSequence önce bir CloseSequence/CloseSequenceResponse 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.

Bir ileti ö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>

Sekanslar

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.

Bir Sequence başlık örneği.

<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, AckRequested üst bilgisini canlı kalma mekanizması olarak kullanır.

Bir AckRequested başlık örneği.

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

Dizi Onayı

WCF, WS-Reliable Mesajlaşmada sağlanan sıralı onaylar için bir "ek yük" mekanizması kullanır. Aşağıdaki kısıtlamalar geçerlidir:

  • R1601: İki ters dizi mekanizma Offer kullanılarak oluşturulduğunda, SequenceAcknowledgement üst bilgisi istenen alıcıya iletilen herhangi bir uygulama mesajına eklenebilir. Uzak uç noktanın SequenceAcknowledgement piggyback edilmiş bir üst bilgiye erişebilmesi gerekir.

  • B1602: WCF SequenceAcknowledgement öğeleri içeren Nack üst bilgiler oluşturmaz. WCF, her Nack öğesinin bir sıra numarası içerdiğini doğrular, aksi takdirde Nack öğesini ve değerini yoksayar.

Bir SequenceAcknowledgement başlık örneği.

<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-Addressing 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ı kapsar:

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

    • Bir CreateSequence, CloseSequence ya da TerminateSequence iletisinde MessageId başlık eksik.

    • Bir CreateSequence, CloseSequence ya da TerminateSequence iletisinde ReplyTo başlık eksik.

    • Bir CreateSequenceResponse, CloseSequenceResponse veya TerminateSequenceResponse iletisinde RelatesTo başlık bilgisi eksik.

  • B1802: WCF, Endpoint Unavailable mesajındaki adresleme üst bilgilerinin incelenmesine dayanarak sırayı işleyebilen bir uç noktanın dinlemediğini belirtmek için CreateSequence hatasını oluşturur ve iletir.

Protokol Oluşturma

WS-Addressing ile kompozisyon

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

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

  • R2101: hem WS-Addressing 2004/08 hem de WS-Addressing 1.0, WS-Reliable Mesajlaşma ile kullanılabilir.

  • R2102: Verilen bir WS-ReliableMessaging dizisi boyunca veya Offer mekanizması kullanılarak ilişkilendirilen bir çift zıt dizi boyunca tek bir WS-Addressing sürümü kullanılmalıdır.

SOAP ile kompozisyon

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

WS-Security ve WS-SecureConversation ile kompozisyon

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 Konuşma 1.3 protokolü birlikte kullanılmalıdır. WCF için geçerli olan kısıtlamaların listesi aşağıdadır:

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

  • R2302: WS-ReliableMessaging dizileri oluşturulmadan önceAWS-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 oluşturulan, 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ı CreateSequence mesajının wsse:SecurityTokenReference öğesini ve wsrm:UsesSequenceSTR üst bilgisini içermesini gerektirir.

Bir UsesSequenceSTR başlık örneği.

<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>

SSL/TLS oturumlarıyla oluşturma

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

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

  • R2402: Güvenilir Mesajlaşma Başlatıcısı, WCF Yanıtlayıcısına CreateSequence üst bilgisi ile bir wsrm:UsesSequenceSSL mesaj göndermemelidir.

WS-Policy ile kompozisyon

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

WS-ReliableMessaging WS-Policy Doğrulama

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

  • B3001: WCF öğelere wsrmn:RMAssertion WS-Policy Onay ekler wsdl:binding . WCF, wsdl:binding ve wsdl:port öğelerine ekleri destekler.

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

  • B3003: wsrmp:RMAssertion WS-Policy Onayına erişirken WCF, wsp:Optional etiketini görmezden gelir ve WS-RM ilkesini zorunlu olarak ele alır.

  • R3004: WCF, SSL/TLS oturumlarıyla bütünleşmediğinden, wsrmp:SequenceTransportSecurity ilkesini belirten politikayı 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

    Bir örnek 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şletilebilirlik kullanır.

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

  • B4001: Güvenilir Mesajlaşma Akış Kontrolü etkinleştirildiğinde, WCF aşağıdaki örnekte gösterildiği gibi netrm:BufferRemaining başlığının öğe genişletilebilirliğinde bir SequenceAcknowledgement öğesi 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: WCF, Reliable Messaging Flow Control etkinleştirildiğinde dahi üst bilgide bir netrm:BufferRemaining öğesi gerektirmez.

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

  • B4004: Güvenilir Mesajlaşma Akış Kontrolü etkinleştirildiğinde, WCF Güvenilir Mesajlaşma Kaynağı, mesaj iletimini sınırlamak için netrm:BufferRemaining değerini 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, farklı İleti Değişimi Desenleri için WS-ReliableMessaging 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ı: Hem Başlatıcı hem de Yanıtlayıcı HTTP isteklerini alabilir; diğer bir ifadeyle, iki ters HTTP bağlantısı kurulabilir.

Tek yönlü, Adreslenebilir Olmayan Başlatıcı

Bağlayıcılık

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ıya iletmek için HTTP isteklerini ve Yanıtlayıcıdaki tüm iletileri Başlatıcıya iletmek için HTTP yanıtlarını kullanır.

CreateSequence Exchange

WCF Başlatıcısı, bir HTTP isteğinde CreateSequence öğesi olmadan bir Offer ileti iletir ve HTTP yanıtında CreateSequenceResponse iletiyi bekler. WCF Yanıtlayıcısı bir dizi oluşturur ve HTTP yanıtında herhangi bir CreateSequenceResponse öğesi olmadan Accept iletiyi iletir.

Dizi Onayı

WCF Başlatıcısı, CreateSequence mesajı ve hata mesajları hariç tüm mesajların onaylarını işler. WCF Yanıtlayıcı, HTTP yanıtında her zaman tüm dizilere ve AckRequested iletilere bağımsız bir onay gönderir.

CloseSequence Exchange

WCF Başlatıcısı, bir HTTP isteği üzerinde CloseSequence iletisini gönderir ve CreateSequenceResponse iletisini HTTP yanıtında bekler. WCF Yanıtlayıcısı CloseSequenceResponse iletisini HTTP yanıtında iletir.

TerminateSequence Exchange

WCF Başlatıcısı, bir HTTP isteği üzerinde TerminateSequence iletisini gönderir ve TerminateSequenceResponse iletisini HTTP yanıtında bekler. WCF Yanıtlayıcısı TerminateSequenceResponse iletisini HTTP yanıtında iletir.

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

Bağlayıcılık

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ı, HTTP isteğinde CreateSequence öğesi olmayan bir Offer ileti gönderir. WCF Yanıtlayıcı bir dizi oluşturur ve HTTP isteğinde CreateSequenceResponse öğesi olmayan Accept mesajını iletir.

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

Bağlayıcılık

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, Request/Reply ve Addressable Başlatıcı mesaj değişim deseni ile belirli koşullar altında 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 isteğinde bir CreateSequence öğesi içeren bir Offer iletisi gönderir. WCF Yanıtlayıcısı, CreateSequence öğesinin bir Offer öğesi içerdiğinden emin olur, ardından bir dizi oluşturur ve CreateSequenceResponse öğesiyle Accept mesajını iletir.

Sıra Ömrü

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

Bir sırayı etkileyen bir hata oluşturulduğunda, WCF, uzak uç noktanın her iki sırada da hata vermesini bekler. Bir sıradaki hatayı okuduktan sonra, WCF her iki sırayı da hataya geçirir.

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 ardışık düzeninde ileti göndermeyi sürdürebilir.

Request-Reply ve Tek Yönlü, Adreslenemeyen Başlatıcı

Bağlayıcılık

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ıya iletmek için HTTP isteklerini ve Yanıtlayıcıdaki tüm iletileri Başlatıcıya iletmek için HTTP yanıtlarını kullanır.

CreateSequence Exchange

WCF Başlatıcısı, bir HTTP isteğinde bir CreateSequence öğesi içeren Offer mesajı iletir ve HTTP yanıtında CreateSequenceResponse mesajını bekler. WCF Yanıtlayıcı bir dizi oluşturur ve HTTP yanıtı üzerinde bir CreateSequenceResponse öğesiyle Accept iletiyi iletir.

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ğe bir onay, bir hata veya boş bir gövdeyle ve HTTP 202 durum koduyla yanıt verebilir.

İ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ıtların ilişkilendirildiği 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 Girişimcisi bir HTTP isteğinde istek dizisi için bir CloseSequence ileti iletir ve HTTP yanıtında CloseSequenceResponse öğesini bekler.

İstek sırasının kapatılması, yanıt dizisini örtük olarak kapatır. Bu, WCF Başlatıcısı'nın SequenceAcknowledgement iletisinde yanıt dizisinin Son'unu CloseSequence içerdiği ve yanıt dizisinin bir CloseSequence değişimi bulunmadığı 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ı bir HTTP isteğinde istek sırası için bir TerminateSequence ileti iletir ve TerminateSequenceResponse öğesini HTTP yanıtında 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 yanıt dizisinin son SequenceAcknowledgement bileşenini TerminateSequence mesajında içerdiği ve yanıt dizisinin bir TerminateSequence değişimi olmadığı anlamına gelir.

WCF Yanıtlayıcısı TerminateSequenceResponse iletisini HTTP yanıtında iletir.

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

Bağlayıcılık

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 mesaj alışveriş modeli, Duplex, Addressable Başlatıcı mesaj alışveriş modeliyle sı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 isteğinde bir CreateSequence öğesi içeren bir Offer iletisi gönderir. WCF Yanıtlayıcı, CreateSequence bir öğeye sahip olduğundan emin olduktan sonra bir dizi oluşturur ve Offer iletisinin bir CreateSequenceResponse öğeyle iletilmesini sağlar.

İ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 MessageId olmasını sağlar.

  • WCF, her uygulama istek iletisinin ReplyTo olarak yerel uç nokta referansını uygular. Yerel uç nokta başvurusu, Başlatıcı için CreateSequence iletisinin ReplyTo ve Yanıtlayıcı için CreateSequence iletisinin To kısmıdır.

  • WCF, gelen istek iletilerinin bir MessageId ve bir ReplyTo taşıması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 RelatesTo tüm yanıtların doğru To ve wsa üst bilgileri taşımasını sağlar.