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
AcksTo
ReplyTo
veOffer/Endpoint
ile aynı uç nokta başvurularınıCreateSequence
kullanır.R1102:
AcksTo
İletidekiCreateSequence
,ReplyTo
veOffer/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
veEndpoint
uç nokta başvurularının URI bölümününAcksTo
aynı olduğunu doğrular.
- WCF Yanıtlayıcısı, bir dizi oluşturmadan önce ,
R1103:
AcksTo
İletidekiCreateSequence
veOffer/Endpoint
ReplyTo
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 parametrelerininAcksTo
ReplyTo
Offer/Endpoint
aynı olduğunu varsayar ve onaylar ve ters sıralı iletiler için uç nokta başvurusundanReplyTo
başvuru parametrelerini kullanır.
- WCF zorlamaz, ancak üzerindeki
B1104: WCF Başlatıcısı, iletide
CreateSequence
isteğe bağlıExpires
veyaOffer/Expires
öğesini oluşturmaz.B1105: İletiye
CreateSequence
erişirken, WCF Yanıtlayıcısı öğesindekiCreateSequence
değeri öğesindekiCreateSequenceResponse
değer olarakExpires
kullanırExpires
. Aksi takdirde, WCF Yanıtlayıcısı veOffer/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
öğelerindeCreateSequence/Offer
isteğe bağlıIncompleteSequenceBehavior
öğe oluşturur.B1108: WCF yalnızca öğesindeki
DiscardFollowingFirstGap
IncompleteSequenceBehavior
veNoDiscard
değerlerini kullanır.- WS-ReliableMessaging, bir oturumu oluşturan iki bağıntılı diziyi oluşturmak için mekanizmayı kullanır
Offer
.
- WS-ReliableMessaging, bir oturumu oluşturan iki bağıntılı diziyi oluşturmak için mekanizmayı kullanır
B1109: Bir öğe içeriyorsa
CreateSequence
, WCF Yanıtlayıcısı'nın bir öğesizAccept
yanıtCreateSequenceResponse
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ı birCreateSequenceRefused
hatayla yanıt vererek sunulan sırayı reddeder.R1112: Mekanizma kullanılarak
Offer
iki ters dizi oluşturulduğunda,[address]
uç nokta başvurusununCreateSequenceResponse/Accept/AcksTo
özelliği bayt için ileti baytınınCreateSequence
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ıktanCloseSequence/CloseSequenceResponse
sonra iletiyi gönderir.R1302: WCF, öğenin belirli bir dizi için tüm
CloseSequence
veTerminateSequence
iletiler arasında tutarlı olduğunu doğrularLastMsgNumber
. Bu, hem tümCloseSequence
TerminateSequence
iletilerde hem de iletilerde mevcut olmadığı veya tümüCloseSequence
TerminateSequence
ve iletilerde aynı olduğu anlamına gelirLastMsgNumber
.B1303: El sıkışması sonrasında
CloseSequence/CloseSequenceResponse
birTerminateSequence
ileti alındığında Reliable Messaging hedefi birTerminateSequenceResponse
iletiyle yanıt verir. Reliable Messaging kaynağı iletiyi göndermedenTerminateSequence
ö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 birTerminateSequence
ileti alındığında, WCF Reliable Messaging hedefi birTerminateSequenceResponse
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ükselterekFaulted
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:long
yü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 istenenSequenceAcknowledgement
alıcıya iletilen herhangi bir uygulama iletisine eklenebilir. Uzak uç noktanın bir piggybacked üst bilgisine erişebilmesiSequenceAcknowledgement
gerekir.B1602: WCF öğeleri içeren
Nack
üst bilgiler oluşturmazSequenceAcknowledgement
. WCF, herNack
öğenin bir sıra numarası içerdiğini doğrular, ancak aksi takdirde öğeyiNack
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 kodunetrm:ConnectionLimitReached
oluş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
CreateSequence
veyaCloseSequence
TerminateSequence
iletisinde üstMessageId
bilgi eksik.bir
CreateSequence
veyaCloseSequence
TerminateSequence
iletisinde üstReplyTo
bilgi eksik.Bir
CreateSequenceResponse
,CloseSequenceResponse
veyaTerminateSequenceResponse
iletisinde üstRelatesTo
bilgi eksik.
B1802:WCF, iletideki
Endpoint Unavailable
adresleme üst bilgilerininCreateSequence
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çermesiniwsse:SecurityTokenReference
wsrm: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:RMAssertion
wsdl:binding
. WCF hem ekleriwsdl:binding
hemwsdl: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 yoksayarwsp:Optional
ve WS-RM ilkesini zorunlu olarak ele alır.R3004: WCF SSL/TLS oturumlarıyla oluşturmadığından, WCF belirten
wsrmp:SequenceTransportSecurity
ilkeyi 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 WCF
ReliableSessionBindingElement
ü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 true
olarak 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 birnetrm: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
birnetrm: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 ilexs:int
'ninmaxInclusive
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/Reply
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 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 SequenceAcknowledgement
dizisi 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 SequenceAcknowledgement
CloseSequence
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 SequenceAcknowledgement
TerminateSequence
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 birMessageId
olmasını sağlar.WCF, her uygulama isteği iletisinin olarak yerel uç nokta başvurusunu
ReplyTo
uygular. Yerel uç nokta başvurusu, iletininCreateSequence
ReplyTo
Başlatıcı için ve iletininCreateSequence
Yanıtlayıcı için olmasıdırTo
.WCF, gelen istek iletilerinin ve
MessageId
ReplyTo
değ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ğruRelatesTo
veTo
üst bilgileri taşımasını sağlar.