Delen via


Reliable Messaging Protocol versie 1.1

In dit onderwerp vindt u informatie over de implementatie van Windows Communication Foundation (WCF) voor het WS-ReliableMessaging-protocol van februari 2007 (versie 1.1) dat nodig is voor interoperation met behulp van het HTTP-transport. WCF volgt de WS-ReliableMessaging-specificatie met de beperkingen en verduidelijkingen die in dit onderwerp worden uitgelegd. Houd er rekening mee dat het WS-ReliableMessaging-protocol versie 1.1 wordt geïmplementeerd vanaf .NET Framework 3.5.

Het WS-ReliableMessaging-protocol van februari 2007 wordt door de ReliableSessionBindingElementWCF geïmplementeerd.

Voor het gemak gebruikt het onderwerp de volgende rollen:

  • Initiator: de client die WS-Reliable Message-reeks maakt.

  • Responder: De service die de aanvragen van de initiator ontvangt.

In dit document worden de voorvoegsels en naamruimten in de volgende tabel gebruikt.

Voorvoegsel Naamruimte
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 of WS-Policy 1.5)

Berichten

Reeks maken

WCF implementeert CreateSequence en CreateSequenceResponse berichten om een betrouwbare berichtenreeks tot stand te brengen. De volgende beperkingen zijn van toepassing:

  • B1101: De WCF-initiator gebruikt dezelfde eindpuntreferentie als die van ReplyToAcksTo het CreateSequence bericht en Offer/Endpoint.

  • R1102: De AcksToen ReplyToOffer/Endpoint eindpuntverwijzingen in het CreateSequence bericht moeten adreswaarden hebben met identieke tekenreeksweergaven, zodat ze overeenkomen met de octet.

    • De WCF Responder controleert of het URI-gedeelte van de AcksToen ReplyToEndpoint eindpuntverwijzingen identiek zijn voordat een reeks wordt gemaakt.
  • R1103: De AcksToReplyToOffer/Endpoint en eindpuntverwijzingen in het CreateSequence bericht moeten dezelfde set referentieparameters hebben.

    • WCF dwingt niet af, maar gaat ervan uit dat verwijzingsparameters van de AcksToen ReplyToOffer/Endpoint eindpuntverwijzingen CreateSequence identiek zijn en referentieparameters van de ReplyTo eindpuntverwijzing gebruiken voor bevestigingen en omgekeerde reeksberichten.
  • B1104: De WCF-initiator genereert niet het optionele Expires element of Offer/Expires element in het CreateSequence bericht.

  • B1105: Bij het openen van het CreateSequence bericht gebruikt de WCF Responder de Expires waarde in het CreateSequence element als de Expires waarde in het CreateSequenceResponse element. Anders leest en negeert de WCF-responder de Expires en Offer/Expires waarden.

  • B1106: Bij het openen van het CreateSequenceResponse bericht leest de WCF-initiator de optionele Expires waarde, maar gebruikt deze niet.

  • B1107: De WCF-initiator en responder genereren altijd het optionele IncompleteSequenceBehavior element in de CreateSequence/Offer en CreateSequenceResponse elementen.

  • B1108: WCF gebruikt alleen de DiscardFollowingFirstGap en NoDiscard waarden in het IncompleteSequenceBehavior element.

    • WS-ReliableMessaging maakt gebruik van het Offer mechanisme om de twee omgekeerde gecorreleerde reeksen vast te stellen die een sessie vormen.
  • B1109: Als CreateSequence dit een Offer element bevat, weigert WCF Responder de aangeboden reeks door te reageren met een CreateSequenceResponse zonder element Accept .

  • B1110: Als een Reliable Messaging Responder de aangeboden reeks weigert, krijgt de WCF-initiator een fout in de zojuist gevestigde reeks.

  • B1111: Als CreateSequence dit geen element bevat Offer , weigert de wcf-beantwoorder in twee richtingen de aangeboden reeks door te reageren met een CreateSequenceRefused fout.

  • R1112: Wanneer twee omgekeerde reeksen worden vastgesteld met behulp van het Offer mechanisme, moet de [address] eigenschap van de CreateSequenceResponse/Accept/AcksTo eindpuntreferentie overeenkomen met de doel-URI van de CreateSequence bericht-byte voor byte.

  • R1113: Wanneer er twee omgekeerde reeksen worden vastgesteld met behulp van het Offer mechanisme, moeten alle berichten in beide reeksen die van de initiator naar de responder stromen, naar dezelfde eindpuntverwijzing worden verzonden.

WCF maakt gebruik van WS-ReliableMessaging om betrouwbare sessies tot stand te brengen tussen de initiator en de responder. De WCF WS-ReliableMessaging-implementatie biedt een betrouwbare sessie voor eenrichtings-, aanvraag-antwoord- en full duplex-berichtpatronen. Met het WS-ReliableMessaging-mechanisme OfferCreateSequenceCreateSequenceResponse kunt u twee gecorreleerde omgekeerde reeksen tot stand brengen en een sessieprotocol bieden dat geschikt is voor alle berichteindpunten. Omdat WCF een beveiligingsgarantie biedt voor een dergelijke sessie, inclusief end-to-end-beveiliging voor sessie-integriteit, is het praktisch om ervoor te zorgen dat berichten die bedoeld zijn voor dezelfde partij op dezelfde bestemming aankomen. Hiermee kunt u ook 'piggy-backing' van reeksbevestigingen voor toepassingsberichten toestaan. Daarom zijn beperkingen R1102, R1112 en R1113 van toepassing op WCF.

Een voorbeeld van een CreateSequence bericht.

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

Een voorbeeld van een CreateSequenceResponse bericht.

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

Een reeks sluiten

WCF maakt gebruik van de CloseSequence en CloseSequenceResponse berichten voor een door reliable messaging-bron geïnitieerde afsluiting. De WCF Reliable Messaging-bestemming start het afsluiten niet en de WCF Reliable Messaging-bron biedt geen ondersteuning voor een door reliable messaging geïnitieerde afsluiting. De volgende beperkingen zijn van toepassing:

  • B1201: De WCF Reliable Messaging-bron verzendt altijd een CloseSequence bericht om de reeks af te sluiten.

  • B1202: De reliable messaging-bron wacht op bevestiging van het volledige reeksbericht voordat het CloseSequence bericht wordt verzonden.

  • B1203: De reliable messaging-bron bevat altijd het optionele LastMsgNumber element, tenzij de reeks geen berichten bevat.

  • R1204: De Reliable Messaging-bestemming mag het afsluiten niet initiëren door een CloseSequence bericht te verzenden.

  • B1205: Bij ontvangst van een CloseSequence bericht beschouwt de WCF Reliable Messaging-bron de reeks onvolledig en wordt een fout verzonden.

Een voorbeeld van een CloseSequence bericht.

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

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

Sequentiebeëindiging

WCF gebruikt voornamelijk de TerminateSequence/TerminateSequenceResponse handshake na het voltooien van de CloseSequence/CloseSequenceResponse handshake. De WCF Reliable Messaging-bestemming initieert geen beëindiging en de Reliable Messaging-bron biedt geen ondersteuning voor een door reliable messaging geïnitieerde beëindiging. De volgende beperkingen zijn van toepassing:

  • B1301: De WCF-initiator verzendt TerminateSequence het bericht alleen na de geslaagde voltooiing van de CloseSequence/CloseSequenceResponse handshake.

  • R1302: WCF valideert dat het LastMsgNumber element consistent is voor alle CloseSequence en TerminateSequence berichten voor een bepaalde reeks. Dit betekent dat LastMsgNumber dit niet aanwezig is op alle CloseSequence berichten of TerminateSequence dat het aanwezig is en identiek is aan alle CloseSequence berichten en TerminateSequence berichten.

  • B1303: Bij ontvangst van een TerminateSequence bericht na de CloseSequence/CloseSequenceResponse handshake reageert de Reliable Messaging-bestemming met een TerminateSequenceResponse bericht. Omdat de Reliable Messaging-bron de definitieve bevestiging heeft voordat het TerminateSequence bericht wordt verzonden, weet de Reliable Messaging-bestemming zonder twijfel dat de reeks eindigt en resources onmiddellijk vrijkomt.

  • B1304: Bij ontvangst van een TerminateSequence bericht vóór de CloseSequence/CloseSequenceResponse handshake reageert de WCF Reliable Messaging-bestemming met een TerminateSequenceResponse bericht. Als de Reliable Messaging-bestemming bepaalt dat er geen inconsistenties in de volgorde zijn, wacht de Reliable Messaging-bestemming op een door de toepassing opgegeven tijd voordat resources worden vrijgemaakt, zodat de client de kans krijgt om de definitieve bevestiging te ontvangen. Anders worden resources onmiddellijk vrijgemaakt door de Reliable Messaging-bestemming en wordt aangegeven aan de toepassingsbestemming dat de reeks met twijfel eindigt door de gebeurtenis op te Faulted vragen.

Een voorbeeld van een TerminateSequence bericht.

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

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

Reeksen

Hier volgt een lijst met beperkingen die van toepassing zijn op reeksen:

  • B1401:WCF genereert en opent reeksnummers die niet hoger zijn dan xs:longde maximale inclusieve waarde, 9223372036854775807.

Een voorbeeld van een Sequence koptekst.

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

Bevestiging aanvragen

WCF gebruikt de AckRequested header als een keep-alive-mechanisme.

Een voorbeeld van een AckRequested koptekst.

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

SequenceAcknowledgement

WCF maakt gebruik van een 'piggy-back'-mechanisme voor reeksbevestigingen die worden geleverd in WS-Reliable Messaging. De volgende beperkingen zijn van toepassing:

  • R1601: Wanneer er twee omgekeerde reeksen worden vastgesteld met behulp van het Offer mechanisme, kan de SequenceAcknowledgement header worden opgenomen in elk toepassingsbericht dat naar de beoogde ontvanger wordt verzonden. Het externe eindpunt moet toegang hebben tot een piggybacked SequenceAcknowledgement header.

  • B1602: WCF genereert SequenceAcknowledgement geen headers die elementen bevatten Nack . WCF valideert dat elk Nack element een volgnummer bevat, maar negeert anders het element en de Nack waarde.

Een voorbeeld van een SequenceAcknowledgement koptekst.

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

Hier volgt een lijst met beperkingen die van toepassing zijn op de WCF-implementatie van WS-ReliableMessaging-fouten. De volgende beperkingen zijn van toepassing:

  • B1701: WCF genereert MessageNumberRollover geen fouten.

  • B1702: Boven SOAP 1.2, wanneer het service-eindpunt de verbindingslimiet bereikt en geen nieuwe verbindingen kan verwerken, genereert WCF een geneste CreateSequenceRefused foutsubcode, netrm:ConnectionLimitReachedzoals wordt weergegeven in het volgende voorbeeld.

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

Omdat WS-ReliableMessaging gebruikmaakt van WS-Addressing, kan de WS-ReliableMessaging-implementatie WS-ReliableMessaging fouten genereren en verzenden. In deze sectie worden de WS-Adresseringsfouten behandeld die WCF expliciet genereert en verzendt op de WS-ReliableMessaging-laag:

  • B1801:WCF genereert en verzendt de Message Addressing Header Required fout wanneer een van de volgende waar is:

    • Een CreateSequenceof CloseSequenceTerminateSequence bericht ontbreekt in een MessageId koptekst.

    • Een CreateSequenceof CloseSequenceTerminateSequence bericht ontbreekt in een ReplyTo koptekst.

    • Een CreateSequenceResponse, CloseSequenceResponseof TerminateSequenceResponse bericht ontbreekt in een RelatesTo koptekst.

  • B1802:WCF genereert en verzendt de Endpoint Unavailable fout om aan te geven dat er geen eindpunt luistert dat de volgorde kan verwerken op basis van het onderzoek van de adresseringsheaders in het CreateSequence bericht.

Protocolsamenstelling

Samenstelling met WS-Adressering

WCF ondersteunt twee versies van WS-Addressing: WS-Addressing 2004/08 [WS-ADDR] en W3C WS-Addressing 1.0 Aanbevelingen [WS-ADDR-CORE] en [WS-ADDR-SOAP].

Hoewel in de specificatie WS-ReliableMessaging alleen WS-Addressing 2004/08 wordt vermeld, wordt de WS-Adresseringsversie niet beperkt tot gebruik. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:

  • R2101: WS-Addressing 2004/08 en WS-Addressing 1.0 kunnen worden gebruikt met WS-Reliable Messaging.

  • R2102: Een enkele versie van WS-Addressing moet worden gebruikt in een bepaalde WS-ReliableMessaging-reeks of een paar omgekeerde reeksen die zijn gecorreleerd met behulp van het Offer mechanisme.

Samenstelling met SOAP

WCF ondersteunt het gebruik van zowel SOAP 1.1 als SOAP 1.2 met WS-Reliable Messaging.

Samenstelling met WS-Security en WS-SecureConversation

WCF biedt bescherming voor WS-ReliableMessaging-reeksen met behulp van secure Transport (HTTPS), samenstelling met WS-Security en samenstelling met WS-Secure Conversation. Het protocol WS-ReliableMessaging 1.1, WS-Security 1.1 en WS-Secure Conversation 1.3 moeten samen worden gebruikt. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:

  • R2301: Voor de bescherming van de integriteit van een WS-ReliableMessaging-reeks naast de integriteit en vertrouwelijkheid van afzonderlijke berichten, moet WS-Secure Conversation worden gebruikt.

  • R2302:AWS-Secure Conversation session moet tot stand worden gebracht voordat u WS-ReliableMessaging sequence(s) tot stand gebracht.

  • R2303: Als de levensduur van de WS-ReliableMessaging-reeks de levensduur van de WS-Secure-gesprekssessie overschrijdt, moet het SecurityContextToken bestaande gesprek met behulp van WS-Secure Conversation worden vernieuwd met behulp van de bijbehorende WS-Secure Conversation Renewal-binding.

  • B2304:WS-ReliableMessaging-reeks of een paar gecorreleerde omgekeerde reeksen zijn altijd gebonden aan één WS-SecureConversation-sessie.

  • R2305: Wanneer het is samengesteld met WS-Secure Conversation, vereist de WCF-responder dat het CreateSequence bericht het wsse:SecurityTokenReference element en de wsrm:UsesSequenceSTR header bevat.

Een voorbeeld van een UsesSequenceSTR koptekst.

<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>

Samenstelling met SSL/TLS-sessies

WCF biedt geen ondersteuning voor samenstelling met SSL/TLS-sessies:

  • B2401: WCF genereert de wsrm:UsesSequenceSSL header niet.

  • R2402: Een betrouwbare berichtinitiator mag geen bericht met een wsrm:UsesSequenceSSL koptekst verzenden CreateSequence naar een WCF Responder.

Samenstelling met WS-Policy

WCF ondersteunt twee versies van WS-Policy: WS-Policy 1.2 en WS-Policy 1.5.

WS-ReliableMessaging WS-Policy Assertion

WCF maakt gebruik van WS-ReliableMessaging WS-Policy Assertion wsrm:RMAssertion om eindpuntmogelijkheden te beschrijven. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:

  • B3001: WCF koppelt wsrmn:RMAssertion WS-Policy Assertion aan wsdl:binding elementen. WCF ondersteunt zowel bijlagen als wsdl:bindingwsdl:port elementen.

  • B3002: WCF genereert nooit de wsp:Optional tag.

  • B3003: Bij toegang tot de wsrmp:RMAssertion WS-Policy Assertion negeert WCF de wsp:Optional tag en behandelt het WS-RM-beleid als verplicht.

  • R3004: Omdat WCF niet samenstelt met SSL/TLS-sessies, accepteert WCF geen beleid dat aangeeft wsrmp:SequenceTransportSecurity.

  • B3005: WCF genereert altijd het wsrmp:DeliveryAssurance element.

  • B3006: WCF geeft altijd de wsrmp:ExactlyOnce leveringsgarantie aan.

  • B3007: WCF genereert en leest de volgende eigenschappen van de WS-ReliableMessaging-assertie en biedt controle over deze eigenschappen op de WCFReliableSessionBindingElement:

    • netrmp:InactivityTimeout

    • netrmp:AcknowledgementInterval

    Een voorbeeld van een 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-extensie voor stroombeheer

WCF maakt gebruik van de uitbreidbaarheid van WS-ReliableMessaging om optionele extra strengere controle over de sequentieberichtstroom te bieden.

Stroombeheer is ingeschakeld door de ReliableSessionBindingElement.FlowControlEnabled eigenschap in te stellen op true. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:

  • B4001: Wanneer Reliable Messaging Flow Control is ingeschakeld, genereert WCF een netrm:BufferRemaining element in de element-uitbreidbaarheid van de SequenceAcknowledgement header, zoals wordt weergegeven in het volgende voorbeeld.

    <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: Zelfs wanneer Reliable Messaging Flow Control is ingeschakeld, heeft WCF geen element in de SequenceAcknowledgement header nodignetrm:BufferRemaining.

  • B4003: WCF Reliable Messaging Destination gebruikt netrm:BufferRemaining om aan te geven hoeveel nieuwe berichten het kan bufferen.

  • B4004:Wanneer Reliable Messaging Flow Control is ingeschakeld, gebruikt de WCF Reliable Messaging Source de waarde van het beperken van netrm:BufferRemaining de berichtoverdracht.

  • B4005: WCF genereert netrm:BufferRemaining gehele getallen tussen 0 en 4096 inclusief en leest gehele getallen tussen 0 en xs:int's maxInclusive waarde 214748364 inclusief.

Berichtuitwisselingspatronen

In deze sectie wordt het gedrag van WCF beschreven wanneer WS-ReliableMessaging wordt gebruikt voor verschillende Berichtuitwisselingspatronen. Voor elk Message Exchange-patroon worden de volgende twee implementatiescenario's overwogen:

  • Niet-adresseerbare initiator: Initiator bevindt zich achter een firewall; Responder kan alleen berichten aan de initiator bezorgen op HTTP-antwoorden.

  • Adresseerbare initiator: initiator en responder kunnen beide HTTP-aanvragen verzenden; met andere woorden, twee omgekeerde HTTP-verbindingen kunnen tot stand worden gebracht.

Eenmalige, niet-adresseerbare initiator

Binding

WCF biedt een eenrichtingspatroon voor het uitwisselen van berichten met één reeks via één HTTP-kanaal. WCF gebruikt HTTP-aanvragen om alle berichten van de initiator te verzenden naar de responder en HTTP-antwoorden om alle berichten van de responder naar de initiator te verzenden.

CreateSequence Exchange

De WCF-initiator verzendt een CreateSequence bericht zonder Offer element in een HTTP-aanvraag en verwacht het CreateSequenceResponse bericht op het HTTP-antwoord. De WCF Responder maakt een reeks en verzendt het CreateSequenceResponse bericht zonder Accept element in het HTTP-antwoord.

SequenceAcknowledgement

De WCF Initiator verwerkt bevestigingen voor het beantwoorden van alle berichten, met uitzondering van het bericht en de CreateSequence foutberichten. De WCF Responder verzendt altijd een zelfstandige bevestiging op het HTTP-antwoord naar alle volgorde en AckRequested berichten.

CloseSequence Exchange

De WCF-initiator verzendt een CloseSequence bericht op een HTTP-aanvraag en verwacht het CreateSequenceResponse bericht op het HTTP-antwoord. De WCF Responder verzendt het CloseSequenceResponse bericht op het HTTP-antwoord.

TerminateSequence Exchange

De WCF-initiator verzendt een TerminateSequence bericht op een HTTP-aanvraag en verwacht het TerminateSequenceResponse bericht op het HTTP-antwoord. De WCF Responder verzendt het TerminateSequenceResponse bericht op het HTTP-antwoord.

Eén manier, adresseerbare initiator

Binding

WCF biedt een eenrichtingspatroon voor het uitwisselen van berichten met één reeks via één binnenkomend en één uitgaand HTTP-kanaal. WCF gebruikt de HTTP-aanvragen om alle berichten te verzenden. Alle HTTP-antwoorden hebben een lege hoofdtekst en HTTP 202-statuscode.

CreateSequence Exchange

De WCF-initiator verzendt een CreateSequence bericht zonder Offer element in een HTTP-aanvraag. De WCF Responder maakt een reeks en verzendt het CreateSequenceResponse bericht zonder Accept element op een HTTP-aanvraag.

Duplex, adresseerbare initiator

Binding

WCF biedt een volledig asynchroon, tweerichtingsberichtuitwisselingspatroon met behulp van twee reeksen via één inkomend en één uitgaand HTTP-kanaal. Dit patroon voor het uitwisselen van berichten kan op een beperkte manier worden gecombineerd met het Request/ReplyAddressable patroon voor berichtuitwisseling van initiators. WCF gebruikt HTTP-aanvragen om alle berichten te verzenden. Alle HTTP-antwoorden hebben een lege hoofdtekst en HTTP 202-statuscode.

CreateSequence Exchange

De WCF-initiator verzendt een CreateSequence bericht met een Offer element op een HTTP-aanvraag. De WCF Responder zorgt ervoor dat het CreateSequence element een Offer element heeft, maakt vervolgens een reeks en verzendt het CreateSequenceResponse bericht met een Accept element.

Levensduur van reeks

WCF behandelt de twee reeksen als één volledig dubbelzijdige sessie.

Bij het genereren van een fout die één reeks fouten aangeeft, verwacht WCF dat het externe eindpunt beide reeksen fouteert. Bij het lezen van een fout die één reeks fouten maakt, worden beide reeksen door WCF-fouten uitgevoerd.

WCF kan de uitgaande volgorde sluiten en berichten blijven verwerken op de binnenkomende volgorde. Omgekeerd kan WCF de sluiting van de inkomende reeks verwerken en berichten blijven verzenden op de uitgaande volgorde.

Aanvraag-antwoord en one-way, niet-adresseerbare initiator

Binding

WCF biedt een eenrichtings- en aanvraagantwoord-berichtuitwisselingspatroon met behulp van twee reeksen via één HTTP-kanaal. WCF gebruikt HTTP-aanvragen om alle berichten van de initiator te verzenden naar de responder en HTTP-antwoorden om alle berichten van de responder naar de initiator te verzenden.

CreateSequence Exchange

De WCF-initiator verzendt een CreateSequence bericht met een Offer element in een HTTP-aanvraag en verwacht het CreateSequenceResponse bericht op het HTTP-antwoord. De WCF Responder maakt een reeks en verzendt het CreateSequenceResponse bericht met een Accept element in het HTTP-antwoord.

Eenrichtingsbericht

De WCF-initiator verzendt een aanvraagvolgordebericht op de HTTP-aanvraag en ontvangt een zelfstandig bericht op het HTTP-antwoord om een eenrichtingsbericht SequenceAcknowledgement te voltooien. Het SequenceAcknowledgement bericht moet worden bevestigd.

De WCF Responder kan reageren op de aanvraag met een bevestiging, een fout of een antwoord met een lege hoofdtekst en HTTP 202-statuscode.

Tweerichtingsberichten

De WCF-initiator verzendt een aanvraagvolgordebericht op de HTTP-aanvraag en ontvangt een antwoordreeksbericht op het HTTP-antwoord om een tweerichtingsuitwisselingsprotocol te voltooien. Het antwoord moet een SequenceAcknowledgement bevestiging bevatten van het verzoekreeksbericht dat wordt verzonden.

De WCF Responder kan reageren op de aanvraag met een toepassingsantwoord, een fout of een antwoord met een lege hoofdtekst en HTTP 202-statuscode.

Vanwege de aanwezigheid van berichten in één richting en de timing van antwoorden van toepassingen, heeft het volgnummer van het aanvraagreeksbericht en het volgnummer van het antwoordbericht geen correlatie.

Antwoorden opnieuw proberen

WCF is afhankelijk van http-aanvraag-antwoordcorrelatie voor correlatie van tweerichtingsberichtenuitwisselingsprotocollen. Daarom stopt de WCF-initiator niet met het opnieuw proberen van een aanvraagreeksbericht wanneer het aanvraagvolgordebericht wordt bevestigd, maar in plaats daarvan wanneer het HTTP-antwoord een SequenceAcknowledgement, toepassingsantwoord of fout bevat. De WCF Responder probeert antwoorden opnieuw uit te voeren op het HTTP-antwoord van de aanvraag waaraan het antwoord is gecorreleerd.

CloseSequence Exchange

Nadat alle antwoordenreeksberichten en bevestigingen voor alle aanvragenreeksberichten in één richting zijn ontvangen, verzendt de WCF-initiator een CloseSequence bericht voor de aanvraagreeks op een HTTP-aanvraag en verwacht het CloseSequenceResponse op het HTTP-antwoord.

Als u de aanvraagreeks sluit, wordt de antwoordvolgorde impliciet gesloten. Dit betekent dat de WCF-initiator de eindvolgorde SequenceAcknowledgement van de antwoordreeks op het CloseSequence bericht bevat en dat de antwoordvolgorde geen uitwisseling heeft CloseSequence .

De WCF Responder zorgt ervoor dat alle antwoorden worden bevestigd en verzendt het CloseSequenceResponse bericht op het HTTP-antwoord.

TerminateSequence Exchange

Nadat het CloseSequenceResponse bericht is ontvangen, verzendt de WCF-initiator een TerminateSequence bericht voor de aanvraagreeks op een HTTP-aanvraag en verwacht het TerminateSequenceResponse op het HTTP-antwoord.

Net als bij de CloseSequence uitwisseling beëindigt de aanvraagreeks impliciet de antwoordvolgorde. Dit betekent dat de WCF-initiator de definitieve SequenceAcknowledgement antwoordvolgorde van het TerminateSequence bericht bevat en dat de antwoordvolgorde geen uitwisseling heeft TerminateSequence .

De WCF Responder verzendt het TerminateSequenceResponse bericht op het HTTP-antwoord.

Aanvraag/antwoord, adresseerbare initiator

Binding

WCF biedt een patroon voor het uitwisselen van berichten met behulp van twee reeksen via één inkomend en één uitgaand HTTP-kanaal. Dit patroon voor het uitwisselen van berichten kan op een beperkte manier worden gecombineerd met het Duplex, Addressable patroon berichtuitwisseling van initiators. WCF gebruikt de HTTP-aanvragen om alle berichten te verzenden. Alle HTTP-antwoorden hebben een lege hoofdtekst en HTTP 202-statuscode.

CreateSequence Exchange

De WCF-initiator verzendt een CreateSequence bericht met een Offer element op een HTTP-aanvraag. De WCF Responder zorgt ervoor dat het CreateSequence element Offer vervolgens een reeks maakt en het CreateSequenceResponse bericht met een Accept element verzendt.

Correlatie van aanvragen/antwoorden

Het volgende geldt voor alle gecorreleerde aanvragen en antwoorden:

  • WCF zorgt ervoor dat alle toepassingsaanvraagberichten een ReplyTo eindpuntreferentie en een MessageId.

  • WCF past de referentie voor het lokale eindpunt toe als elk bericht van de toepassingsaanvraag ReplyTo. De lokale eindpuntreferentie is de CreateSequence berichten ReplyTo voor de initiator en het CreateSequence bericht To voor de responder.

  • WCF zorgt ervoor dat binnenkomende aanvraagberichten een MessageId en een ReplyTo.

  • WCF zorgt ervoor dat de URI van de ReplyTo eindpuntreferentie van alle toepassingsaanvraagberichten overeenkomt met de lokale eindpuntreferentie zoals eerder is gedefinieerd.

  • WCF zorgt ervoor dat alle antwoorden de juiste RelatesTo antwoorden hebben en To dat alle headers voldoen aan de regels voor wsa aanvraag-/antwoordcorrelatie.