Dela via


Reliable Messaging Protocol version 1.1

Det här avsnittet beskriver implementeringsinformation för Windows Communication Foundation (WCF) för WS-ReliableMessaging februari 2007 (version 1.1) som krävs för att samverka med HTTP-transporten. WCF följer WS-ReliableMessaging-specifikationen med de begränsningar och förtydliganden som beskrivs i det här avsnittet. Observera att WS-ReliableMessaging version 1.1-protokollet implementeras från och med .NET Framework 3.5.

WS-ReliableMessaging Februari 2007-protokollet implementeras i WCF av ReliableSessionBindingElement.

För enkelhetens skull använder ämnet följande roller:

  • Initierare: Klienten som initierar skapandet av WS-Reliable Message-sekvensen.

  • Svarare: Tjänsten som tar emot initierarens begäranden.

Det här dokumentet använder prefixen och namnrymderna i följande tabell.

Prefix Namnområde
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 (Antingen WS-Policy 1.2 eller WS-Policy 1.5)

Meddelandetjänster

Skapa sekvens

WCF implementerar CreateSequence och CreateSequenceResponse meddelanden för att upprätta en tillförlitlig meddelandesekvens. Följande restriktioner gäller:

  • B1101: WCF-initieraren använder samma slutpunktsreferens som CreateSequence meddelandets ReplyTo, AcksTo och Offer/Endpoint.

  • R1102: Slutpunktsreferenserna AcksToReplyTo och Offer/Endpoint i CreateSequence meddelandet måste ha adressvärden med identiska strängrepresentationer så att de matchar oktettvis.

    • WCF-svararen verifierar att URI-delen av AcksToReplyTo , och Endpoint slutpunktsreferenserna är identiska innan en sekvens skapas.
  • R1103: Slutpunktsreferenserna AcksToReplyTo och Offer/Endpoint i CreateSequence meddelandet ska ha samma uppsättning referensparametrar.

    • WCF tillämpar inte, men förutsätter att referensparametrarna AcksToför , ReplyTo och Offer/Endpoint slutpunktsreferenser på CreateSequence är identiska och använder referensparametrar från slutpunktsreferensen ReplyTo för bekräftelser och samtalssekvensmeddelanden.
  • B1104: WCF-initieraren genererar inte det valfria Expires elementet eller Offer/Expires elementet CreateSequence i meddelandet.

  • B1105: Vid åtkomst till CreateSequence meddelandet använder WCF-svararen Expires värdet i elementet CreateSequence som Expires värde i elementet CreateSequenceResponse . Annars läser och ignorerar WCF-svararen Expires värdena och Offer/Expires .

  • B1106: Vid åtkomst till CreateSequenceResponse meddelandet läser WCF-initieraren det valfria Expires värdet men använder det inte.

  • B1107: WCF-initieraren och svararen genererar alltid det valfria IncompleteSequenceBehavior elementet i elementen CreateSequence/Offer och CreateSequenceResponse .

  • B1108: WCF använder endast DiscardFollowingFirstGap värdena och NoDiscard i elementet IncompleteSequenceBehavior .

    • WS-ReliableMessaging använder mekanismen Offer för att upprätta de två omvända korrelerade sekvenserna som utgör en session.
  • B1109: Om CreateSequence innehåller ett Offer element avvisar WCF-svararen den erbjudna sekvensen genom att svara med ett CreateSequenceResponse utan element Accept .

  • B1110: Om en Reliable Messaging Responder avvisar den erbjudna sekvensen felar WCF-initieraren den nyligen etablerade sekvensen.

  • B1111: Om CreateSequence inte innehåller ett Offer element avvisar den dubbelriktade WCF-svararen den erbjudna sekvensen genom att svara med ett CreateSequenceRefused fel.

  • R1112: När två omvända sekvenser upprättas med hjälp av mekanismen Offer[address] måste egenskapen för slutpunktsreferensen CreateSequenceResponse/Accept/AcksTo matcha mål-URI: CreateSequence n för meddelandebytet för byte.

  • R1113: När två omvända sekvenser upprättas med hjälp av mekanismen Offer måste alla meddelanden på båda sekvenserna som flödar från initieraren till svararen skickas till samma slutpunktsreferens.

WCF använder WS-ReliableMessaging för att upprätta tillförlitliga sessioner mellan initieraren och svararen. WCF WS-ReliableMessaging-implementeringen ger en tillförlitlig session för enkelriktade, begärandesvar och fullständiga duplex-meddelandemönster. WS-ReliableMessaging-mekanismen OfferCreateSequence och CreateSequenceResponse gör att du kan upprätta två korrelerade converse-sekvenser och tillhandahåller ett sessionsprotokoll som är lämpligt för alla meddelandeslutpunkter. Eftersom WCF tillhandahåller en säkerhetsgaranti för en sådan session, inklusive skydd från slutpunkt till slutpunkt för sessionsintegritet, är det praktiskt att se till att meddelanden som är avsedda för samma part kommer till samma mål. På så sätt kan du också "spargrisstöda" sekvensbekrästningar i programmeddelanden. Därför gäller begränsningarna R1102, R1112 och R1113 för WCF.

Ett exempel på ett CreateSequence meddelande.

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

Ett exempel på ett CreateSequenceResponse meddelande.

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

Stänga en sekvens

WCF använder meddelandena CloseSequence och CloseSequenceResponse för en reliable messaging-källinitierad avstängning. WCF Reliable Messaging-målet initierar inte avstängning och WCF Reliable Messaging-källan stöder inte en tillförlitlig meddelandeinitierad avstängning. Följande restriktioner gäller:

  • B1201: WCF Reliable Messaging-källan skickar alltid ett CloseSequence meddelande för att stänga av sekvensen.

  • B1202: Reliable Messaging-källan väntar på bekräftelse av alla sekvensmeddelanden innan meddelandet skickas CloseSequence .

  • B1203: Reliable Messaging-källan innehåller alltid det valfria LastMsgNumber elementet såvida inte sekvensen inte innehåller meddelanden.

  • R1204: Målet Reliable Messaging får inte initiera avstängningen genom att skicka ett CloseSequence meddelande.

  • B1205: När du tar emot ett CloseSequence meddelande anser WCF Reliable Messaging-källan att sekvensen är ofullständig och skickar ett fel.

Ett exempel på ett CloseSequence meddelande.

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

Exempelmeddelande CloseSequenceResponse :

<s:Envelope>
  <s:Header>
    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Lower="1" Upper="30"></wsrm:AcknowledgementRange>
      <wsrm:Final></wsrm:Final>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:6ce1d4c3-e1c1-474f-a8c9-4210e37f7877</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">http://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CloseSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
    </wsrm:CloseSequenceResponse>
  </s:Body>
</s:Envelope>

Sekvensavslut

WCF använder främst handskakningen TerminateSequence/TerminateSequenceResponse när handskakningen har slutförts CloseSequence/CloseSequenceResponse . WCF Reliable Messaging-målet initierar inte avslutningen och reliable messaging-källan stöder inte en reliable messaging-målinitierad avslutning. Följande restriktioner gäller:

  • B1301: WCF-initieraren skickar TerminateSequence endast meddelandet efter att handskakningen har slutförts CloseSequence/CloseSequenceResponse .

  • R1302: WCF verifierar att elementet LastMsgNumber är konsekvent för alla CloseSequence och TerminateSequence meddelanden för en viss sekvens. Det innebär att LastMsgNumber det antingen inte finns på alla CloseSequence och TerminateSequence meddelanden, eller att det finns och är identiskt för alla CloseSequence och TerminateSequence meddelanden.

  • B1303: När du tar emot ett TerminateSequence meddelande efter handskakningen CloseSequence/CloseSequenceResponse svarar reliable messaging-målet med ett TerminateSequenceResponse meddelande. Eftersom reliable messaging-källan har den slutliga bekräftelsen innan meddelandet TerminateSequence skickas vet reliable messaging-målet utan tvekan att sekvensen slutar och återtar resurser omedelbart.

  • B1304: När du tar emot ett TerminateSequence meddelande före handskakningen CloseSequence/CloseSequenceResponse svarar WCF Reliable Messaging-målet med ett TerminateSequenceResponse meddelande. Om målet Reliable Messaging fastställer att det inte finns några inkonsekvenser i sekvensen väntar Reliable Messaging-målet på en angiven tid för programmets mål innan resurserna frigörs, så att klienten kan ta emot den slutliga bekräftelsen. Annars återtar Reliable Messaging-målet resurser omedelbart och anger för programmets mål att sekvensen slutar med tvivel genom att händelsen höjs Faulted .

Ett exempel på ett TerminateSequence meddelande.

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

Exempelmeddelande TerminateSequenceResponse :

<s:Envelope>
  <s:Header>
    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Lower="1" Upper="30"></wsrm:AcknowledgementRange>
      <wsrm:Final></wsrm:Final>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:3597a398-4f3c-40f4-9335-8f1515572fdf</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:TerminateSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
    </wsrm:TerminateSequenceResponse>
  </s:Body>
</s:Envelope>

Sekvenser

Följande är en lista över begränsningar som gäller för sekvenser:

  • B1401:WCF genererar och kommer åt sekvensnummer som inte är högre än xs:longmaximalt inkluderande värde, 9223372036854775807.

Ett exempel på en Sequence rubrik.

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

Bekräftelse av begäran

WCF använder AckRequested huvudet som en keep-alive-mekanism.

Ett exempel på en AckRequested rubrik.

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

SequenceAcknowledgement

WCF använder en "piggy-back"-mekanism för sekvensbekräsckningar som tillhandahålls i WS-Reliable Messaging. Följande restriktioner gäller:

  • R1601: När två omvända sekvenser upprättas med hjälp av mekanismen OfferSequenceAcknowledgement kan rubriken inkluderas i alla programmeddelanden som skickas till den avsedda mottagaren. Fjärrslutpunkten måste kunna komma åt en piggybacked-rubrik SequenceAcknowledgement .

  • B1602: WCF genererar SequenceAcknowledgement inte rubriker som innehåller Nack element. WCF verifierar att varje Nack element innehåller ett sekvensnummer, men ignorerar annars elementet Nack och värdet.

Ett exempel på en SequenceAcknowledgement rubrik.

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

Följande är en lista över begränsningar som gäller för WCF-implementeringen av WS-ReliableMessaging-fel. Följande restriktioner gäller:

  • B1701: WCF genererar MessageNumberRollover inga fel.

  • B1702: Över SOAP 1.2, när tjänstslutpunkten når anslutningsgränsen och inte kan bearbeta nya anslutningar, genererar WCF en kapslad CreateSequenceRefused felunderkod, netrm:ConnectionLimitReached, som visas i följande exempel.

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

Eftersom WS-ReliableMessaging använder WS-Addressing kan WCF WS-ReliableMessaging-implementeringen generera och överföra WS-adresseringsfel. Det här avsnittet beskriver WS-adresseringsfel som WCF uttryckligen genererar och överför på WS-ReliableMessaging-lagret:

  • B1801:WCF genererar och överför Message Addressing Header Required felet när något av följande är sant:

    • Ett CreateSequence, CloseSequence eller-meddelande TerminateSequence saknar ett MessageId huvud.

    • Ett CreateSequence, CloseSequence eller-meddelande TerminateSequence saknar ett ReplyTo huvud.

    • Ett CreateSequenceResponsemeddelande , CloseSequenceResponseeller TerminateSequenceResponse ett meddelande saknar ett RelatesTo huvud.

  • B1802:WCF genererar och överför felet för att indikera att det inte finns någon slutpunktslyssning Endpoint Unavailable som kan bearbeta sekvensen baserat på undersökning av adressrubrikerna i CreateSequence meddelandet.

Protokollsammansättning

Sammansättning med WS-adressering

WCF stöder två versioner av WS-Addressing: WS-Addressing 2004/08 [WS-ADDR] och W3C WS-Addressing 1.0 Rekommendationer [WS-ADDR-CORE] och [WS-ADDR-SOAP].

Även om WS-ReliableMessaging-specifikationen endast nämner WS-Addressing 2004/08, begränsar den inte den WS-Adresseringsversion som ska användas. Följande är en lista över begränsningar som gäller för WCF:

  • R2101: Både WS-Addressing 2004/08 och WS-Addressing 1.0 kan användas med WS-Reliable Messaging.

  • R2102: En enda version av WS-Addressing måste användas i en viss WS-ReliableMessaging-sekvens eller ett par converse-sekvenser som korreleras med hjälp av mekanismen Offer .

Sammansättning med SOAP

WCF stöder användning av både SOAP 1.1 och SOAP 1.2 med WS-Reliable Messaging.

Sammansättning med WS-Security och WS-SecureConversation

WCF ger skydd för WS-ReliableMessaging-sekvenser med hjälp av säker transport (HTTPS), komposition med WS-Security och komposition med WS-Secure Conversation. Protokollet WS-ReliableMessaging 1.1, WS-Security 1.1 och WS-Secure Conversation 1.3 bör användas tillsammans. Följande är en lista över begränsningar som gäller för WCF:

  • R2301: För att skydda integriteten i en WS-ReliableMessaging-sekvens utöver integriteten och konfidentialiteten för enskilda meddelanden kräver WCF att WS-Secure Conversation måste användas.

  • R2302:AWS-Secure Conversation-sessionen måste upprättas innan WS-ReliableMessaging-sekvenser upprättas.

  • R2303: Om WS-ReliableMessaging-sekvensens livslängd överskrider WS-Secure Conversation-sessionens livslängd måste den SecurityContextToken som upprättas med WS-Secure Conversation förnyas med hjälp av motsvarande WS-Secure Conversation Renewal-bindning.

  • B2304:WS-ReliableMessaging-sekvens eller ett par korrelerade converse-sekvenser är alltid bundna till en enda WS-SecureConversation-session.

  • R2305: När den består av WS-Secure Conversation kräver WCF-svararen CreateSequence att meddelandet innehåller elementet wsse:SecurityTokenReference och wsrm:UsesSequenceSTR huvudet.

Ett exempel på en UsesSequenceSTR rubrik.

<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>

Sammansättning med SSL/TLS-sessioner

WCF stöder inte sammansättning med SSL/TLS-sessioner:

  • B2401: WCF genererar wsrm:UsesSequenceSSL inte huvudet.

  • R2402: En reliable messaging-initierare får inte skicka ett CreateSequence meddelande med en wsrm:UsesSequenceSSL rubrik till en WCF-svarare.

Sammansättning med WS-Policy

WCF stöder två versioner av WS-Policy: WS-Policy 1.2 och WS-Policy 1.5.

WS-ReliableMessaging WS-Policy-försäkran

WCF använder WS-ReliableMessaging WS-Policy Assertion wsrm:RMAssertion för att beskriva slutpunktsfunktioner. Följande är en lista över begränsningar som gäller för WCF:

  • B3001: WCF kopplar wsrmn:RMAssertion WS-Policy Assertion till wsdl:binding element. WCF stöder både bifogade filer till wsdl:binding och wsdl:port element.

  • B3002: WCF genererar aldrig taggen wsp:Optional .

  • B3003: Vid åtkomst till wsrmp:RMAssertion WS-Policy Assertion ignorerar WCF taggen wsp:Optional och behandlar WS-RM-principen som obligatorisk.

  • R3004: Eftersom WCF inte består av SSL/TLS-sessioner accepterar WCF inte en princip som anger wsrmp:SequenceTransportSecurity.

  • B3005: WCF genererar alltid elementet wsrmp:DeliveryAssurance .

  • B3006: WCF anger alltid leveransgarantin wsrmp:ExactlyOnce .

  • B3007: WCF genererar och läser följande egenskaper för WS-ReliableMessaging-försäkran och ger kontroll över dem på WCFReliableSessionBindingElement:

    • netrmp:InactivityTimeout

    • netrmp:AcknowledgementInterval

    Ett exempel på en RMAssertion.

    <wsrmp:RMAssertion>
      <wsp:Policy>
        <wsrmp:SequenceSTR/>
        <wsrmp:DeliveryAssurance>
          <wsp:Policy>
            <wsrmp:ExactlyOnce/>
            <wsrmp:InOrder/>
          </wsp:Policy>
        </wsrmp:DeliveryAssurance>
      </wsp:Policy>
      <netrmp:InactivityTimeout Milliseconds="600000"/>
      <netrmp:AcknowledgementInterval Milliseconds="200"/>
    </wsrmp:RMAssertion>
    

WS-ReliableMessaging-tillägg för flödeskontroll

WCF använder WS-ReliableMessaging-utökningsbarhet för att ge ytterligare mer kontroll över sekvensmeddelandeflödet.

Flödeskontroll aktiveras genom att ställa in egenskapen på ReliableSessionBindingElement.FlowControlEnabledtrue. Följande är en lista över begränsningar som gäller för WCF:

  • B4001: När Reliable Messaging Flow Control är aktiverat genererar WCF ett netrm:BufferRemaining element i elementets utökningsbarhet för SequenceAcknowledgement rubriken, som du ser i följande exempel.

    <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: Även om Reliable Messaging Flow Control är aktiverat kräver WCF inte något netrm:BufferRemaining element i SequenceAcknowledgement huvudet.

  • B4003: WCF Reliable Messaging Destination använder netrm:BufferRemaining för att ange hur många nya meddelanden det kan buffring.

  • B4004:När Reliable Messaging Flow Control är aktiverat använder WCF Reliable Messaging Source värdet för för att begränsa överföring av netrm:BufferRemaining meddelanden.

  • B4005: WCF genererar heltalsvärden netrm:BufferRemaining mellan 0 och 4096 och läser heltalsvärden mellan 0 och xs:int's maxInclusive värde 214748364 inklusive.

Exchange-mönster för meddelanden

I det här avsnittet beskrivs WCF:s beteende när WS-ReliableMessaging används för olika Mönster för meddelandeutbyte. Följande två distributionsscenarier beaktas för varje Meddelandeutbytesmönster:

  • Initierare som inte kan adresseras: Initieraren finns bakom en brandvägg. Svararen kan endast leverera meddelanden till initieraren på HTTP-svar.

  • Adresserbar initierare: Initieraren och svararen kan båda skickas HTTP-begäranden. Med andra ord kan två omvända HTTP-anslutningar upprättas.

Enkelriktad, icke-adresserbar initierare

Bindning

WCF tillhandahåller ett enkelriktad meddelandeutbytesmönster med en sekvens över en HTTP-kanal. WCF använder HTTP-begäranden för att överföra alla meddelanden från initieraren till svararen och HTTP-svar för att överföra alla meddelanden från svararen till initieraren.

CreateSequence Exchange

WCF-initieraren skickar ett CreateSequence meddelande utan Offer element i en HTTP-begäran och förväntar sig meddelandet CreateSequenceResponse på HTTP-svaret. WCF-svararen skapar en sekvens och skickar CreateSequenceResponse meddelandet utan Accept element i HTTP-svaret.

SequenceAcknowledgement

WCF-initieraren bearbetar bekräftelser på svaret för alla meddelanden förutom CreateSequence meddelandet och felmeddelandena. WCF-svararen skickar alltid en fristående bekräftelse på HTTP-svaret till alla sekvenser och AckRequested meddelanden.

CloseSequence Exchange

WCF-initieraren skickar ett CloseSequence meddelande på en HTTP-begäran och förväntar sig CreateSequenceResponse meddelandet på HTTP-svaret. WCF-svararen CloseSequenceResponse skickar meddelandet på HTTP-svaret.

TerminateSequence Exchange

WCF-initieraren skickar ett TerminateSequence meddelande på en HTTP-begäran och förväntar sig TerminateSequenceResponse meddelandet på HTTP-svaret. WCF-svararen TerminateSequenceResponse skickar meddelandet på HTTP-svaret.

One Way, adresserbar initierare

Bindning

WCF tillhandahåller ett enkelriktad meddelandeutbytesmönster med en sekvens över en inkommande och en utgående HTTP-kanal. WCF använder HTTP-begäranden för att överföra alla meddelanden. Alla HTTP-svar har en tom brödtext och HTTP 202-statuskod.

CreateSequence Exchange

WCF-initieraren skickar ett CreateSequence meddelande utan Offer element i en HTTP-begäran. WCF-svararen skapar en sekvens och skickar CreateSequenceResponse meddelandet utan Accept element på en HTTP-begäran.

Duplex, Adresserbar initierare

Bindning

WCF tillhandahåller ett helt asynkront, dubbelriktad meddelandeutbytesmönster med två sekvenser över en inkommande och en utgående HTTP-kanal. Det här mönstret för meddelandeutbyte kan blandas med Request/ReplyAddressable , Initiator-mönstret för meddelandeutbyte på ett begränsat sätt. WCF använder HTTP-begäranden för att överföra alla meddelanden. Alla HTTP-svar har en tom brödtext och HTTP 202-statuskod.

CreateSequence Exchange

WCF-initieraren skickar ett CreateSequence meddelande med ett Offer element på en HTTP-begäran. WCF-svararen CreateSequence ser till att har ett Offer element, skapar sedan en sekvens och skickar CreateSequenceResponse meddelandet med ett Accept element.

Sekvenslivslängd

WCF behandlar de två sekvenserna som en helt dubbelsidig session.

När ett fel genereras som felar en sekvens förväntar sig WCF att fjärrslutpunkten ska fela båda sekvenserna. Vid läsning av ett fel som felar en sekvens felar WCF båda sekvenserna.

WCF kan stänga sin utgående sekvens och fortsätta bearbeta meddelanden på den inkommande sekvensen. Omvänt kan WCF bearbeta stängningen av den inkommande sekvensen och fortsätta att skicka meddelanden på dess utgående sekvens.

Begärandesvar och enkelriktad, icke-adresserbar initierare

Bindning

WCF tillhandahåller ett utbytesmönster för enkelriktade och begärandesvarsmeddelanden med två sekvenser över en HTTP-kanal. WCF använder HTTP-begäranden för att överföra alla meddelanden från initieraren till svararen och HTTP-svar för att överföra alla meddelanden från svararen till initieraren.

CreateSequence Exchange

WCF-initieraren skickar ett CreateSequence meddelande med ett Offer element på en HTTP-begäran och förväntar sig meddelandet CreateSequenceResponse på HTTP-svaret. WCF-svararen skapar en sekvens och skickar CreateSequenceResponse meddelandet med ett Accept element i HTTP-svaret.

Enkelriktade meddelanden

För att slutföra ett enkelriktad meddelandeutbyte skickar WCF-initieraren ett meddelande om begärandesekvens på HTTP-begäran och tar emot ett fristående SequenceAcknowledgement meddelande om HTTP-svaret. Måste SequenceAcknowledgement bekräfta meddelandet som skickas.

WCF-svararen kan svara på begäran med en bekräftelse, ett fel eller ett svar med en tom brödtext och HTTP 202-statuskod.

Tvåvägsmeddelanden

För att slutföra ett exchange-protokoll för tvåvägsmeddelanden skickar WCF-initieraren ett meddelande om begärandesekvens på HTTP-begäran och tar emot ett svarssekvensmeddelande om HTTP-svaret. Svaret måste innehålla ett SequenceAcknowledgement bekräftelsemeddelande om att begärandesekvensmeddelandet har överförts.

WCF-svararen kan svara på begäran med ett programsvar, ett fel eller ett svar med en tom brödtext och HTTP 202-statuskod.

På grund av förekomsten av enkelriktade meddelanden och tidpunkten för programsvar har sekvensnumret för begärandesekvensmeddelandet och svarsmeddelandets sekvensnummer ingen korrelation.

Försök svara igen

WCF förlitar sig på http-begäran-svar korrelation för tvåvägs meddelande exchange protokoll korrelation. På grund av detta slutar WCF-initieraren inte att försöka igen med ett sekvensmeddelande för begäran när begärandesekvensmeddelandet bekräftas, utan i stället när HTTP-svaret bär ett SequenceAcknowledgement, programsvar eller fel. WCF-svararen försöker svara på HTTP-svaret för den begäran som svaret är korrelerat till.

CloseSequence Exchange

När du har fått alla svarssekvensmeddelanden och bekräftelser för alla envägsbegärandesekvensmeddelanden skickar WCF-initieraren ett CloseSequence meddelande för begärandesekvensen på en HTTP-begäran och förväntar sig CloseSequenceResponse http-svaret.

Om du stänger begärandesekvensen stängs svarssekvensen implicit. Det innebär att WCF-initieraren innehåller svarssekvensens Final SequenceAcknowledgementCloseSequence meddelandet och att svarssekvensen inte har något CloseSequence utbyte.

WCF-svararen ser till att alla svar bekräftas och skickar CloseSequenceResponse meddelandet på HTTP-svaret.

TerminateSequence Exchange

När meddelandet har tagits emot CloseSequenceResponse skickar WCF-initieraren ett TerminateSequence meddelande för begärandesekvensen på en HTTP-begäran och förväntar sig TerminateSequenceResponse http-svaret.

Precis som CloseSequence utbytet avslutas svarssekvensen implicit genom att avsluta begärandesekvensen. Det innebär att WCF-initieraren innehåller svarssekvensens slut SequenceAcknowledgementTerminateSequence på meddelandet och att svarssekvensen inte har något TerminateSequence utbyte.

WCF-svararen TerminateSequenceResponse skickar meddelandet på HTTP-svaret.

Begäran/svar, adresserbar initierare

Bindning

WCF tillhandahåller ett exchange-mönster för begäran-svar-meddelanden med två sekvenser över en inkommande och en utgående HTTP-kanal. Det här mönstret för meddelandeutbyte kan blandas med Duplex, Addressable initiatormönstret för meddelandeutbyte på ett begränsat sätt. WCF använder HTTP-begäranden för att överföra alla meddelanden. Alla HTTP-svar har en tom brödtext och HTTP 202-statuskod.

CreateSequence Exchange

WCF-initieraren skickar ett CreateSequence meddelande med ett Offer element på en HTTP-begäran. WCF-svararen CreateSequence ser till att har ett Offer element och sedan skapar en sekvens och skickar CreateSequenceResponse meddelandet med ett Accept element.

Korrelation mellan begäran och svar

Följande gäller för alla korrelerade begäranden och svar:

  • WCF ser till att alla programbegärandemeddelanden har en ReplyTo slutpunktsreferens och en MessageId.

  • WCF tillämpar den lokala slutpunktsreferensen som varje programbegärandemeddelandes ReplyTo. Den lokala slutpunktsreferensen CreateSequence är meddelandets ReplyTo för initieraren och CreateSequence meddelandets To för svararen.

  • WCF ser till att inkommande begärandemeddelanden har en MessageId och en ReplyTo.

  • WCF säkerställer att slutpunktsreferensens ReplyTo URI för alla programbegärandemeddelanden matchar den lokala slutpunktsreferensen enligt definitionen tidigare.

  • WCF ser till att alla svar har rätt RelatesToTo och rubriker efter wsa korrelationsregler för begäran/svar.