Azure Relay Hybrid Anslut ions-protokoll

Azure Relay är en av grundpelarna för funktioner i Azure Service Bus-plattformen. Den nya Hybrid Anslut ions-funktionen för Relay är en säker utveckling med öppet protokoll baserat på HTTP och WebSockets. Den ersätter den tidigare, lika namngivna BizTalk Services-funktionen som byggdes på en patentskyddad protokollgrund. Integreringen av Hybrid Anslut ions i Azure App Services fortsätter att fungera som den är.

Hybrid-Anslut ions möjliggör dubbelriktad, begärandesvar och binär dataströmkommunikation och enkelt datagramflöde mellan två nätverksanslutna program. Antingen eller båda parter kan ligga bakom NAT eller brandväggar.

Den här artikeln beskriver interaktionen på klientsidan med Hybrid Anslut ions-reläet för att ansluta klienter i lyssnar- och avsändarroller. Den beskriver också hur lyssnare accepterar nya anslutningar och begäranden.

Interaktionsmodell

Hybrid Anslut ions-reläet ansluter två parter genom att tillhandahålla en mötesplats i Azure-molnet som parterna kan identifiera och ansluta till från sitt eget nätverks perspektiv. Rendezvous-punkten kallas "Hybrid Anslut ion" i den här och annan dokumentation, i API:erna och även i Azure-portalen. Tjänstslutpunkten Hybrid Anslut ions kallas "tjänsten" för resten av den här artikeln.

Tjänsten gör det möjligt att vidarebefordra Web Socket-anslutningar och HTTP(S) begäranden och svar.

Interaktionsmodellen lutar sig mot nomenklaturen som upprättats av många andra nätverks-API:er. Det finns en lyssnare som först anger beredskap för att hantera inkommande anslutningar och därefter accepterar dem när de anländer. Å andra sidan ansluter en klient till lyssnaren och förväntar sig att anslutningen godkänns för att upprätta en dubbelriktad kommunikationsväg. "Anslut", "Lyssna" och "Acceptera" är samma termer som du hittar i de flesta socket-API:er.

Alla vidarebefordrade kommunikationsmodeller har någon av parterna som upprättar utgående anslutningar mot en tjänstslutpunkt. Detta gör "lyssnaren" också till en "klient" i vardaglig användning och kan också orsaka andra terminologiöverlagringar. Den exakta terminologi som därför används för Hybrid Anslut ions är följande:

Programmen på båda sidor av en anslutning kallas "klienter", eftersom de är klienter till tjänsten. Klienten som väntar på och accepterar anslutningar är "lyssnaren" eller sägs vara i "lyssnarrollen". Klienten som initierar en ny anslutning till en lyssnare via tjänsten kallas "avsändaren" eller är i "avsändarrollen".

Lyssnarinteraktioner

Lyssnaren har fem interaktioner med tjänsten. all trådinformation beskrivs senare i den här artikeln i referensavsnittet.

Meddelandena Lyssna, Acceptera och Begär tas emot från tjänsten. Åtgärderna Förnya och Pinga skickas av lyssnaren.

Lyssna meddelande

För att ange beredskap för tjänsten att en lyssnare är redo att acceptera anslutningar skapar den en utgående WebSocket-anslutning. Anslutningshandskakningen bär namnet på en Hybrid-Anslut ion som konfigurerats i Relay-namnområdet och en säkerhetstoken som ger rättigheten "Lyssna" på det namnet.

När WebSocket accepteras av tjänsten är registreringen klar och den etablerade WebSocket hålls vid liv som "kontrollkanal" för att aktivera alla efterföljande interaktioner. Tjänsten tillåter upp till 25 samtidiga lyssnare för en Hybrid Anslut ion. Kvoten för AppHooks ska fastställas.

För Hybrid Anslut ions, om det finns två eller flera aktiva lyssnare, balanseras inkommande anslutningar över dem i slumpmässig ordning. Rättvis distribution görs med bästa möjliga ansträngning.

Acceptera meddelande

När en avsändare öppnar en ny anslutning för tjänsten väljer och meddelar tjänsten en av de aktiva lyssnarna i Hybrid Anslut ion. Det här meddelandet skickas till lyssnaren via den öppna kontrollkanalen som ett JSON-meddelande. Meddelandet innehåller URL:en för den WebSocket-slutpunkt som lyssnaren måste ansluta till för att acceptera anslutningen.

URL:en kan och måste användas direkt av lyssnaren utan extra arbete. Den kodade informationen är endast giltig under en kort tidsperiod, i princip så länge avsändaren är villig att vänta tills anslutningen upprättas från slutpunkt till slutpunkt. Maxgränsen är 30 sekunder. URL:en kan bara användas för ett lyckat anslutningsförsök. Så snart WebSocket-anslutningen med rendezvous-URL:en har upprättats vidarebefordras all ytterligare aktivitet på denna WebSocket från och till avsändaren. Det här beteendet inträffar utan någon åtgärd eller tolkning av tjänsten.

Begärandemeddelande

Förutom WebSocket-anslutningar kan lyssnaren även ta emot HTTP-begäranderamar från en avsändare, om den här funktionen uttryckligen är aktiverad på Hybrid Anslut ion.

Lyssnare som ansluter till Hybrid Anslut ions med HTTP-stöd MÅSTE hantera gestenrequest. En lyssnare som inte hanterar request och därför orsakar upprepade timeout-fel när den är ansluten kan blockeras av tjänsten i framtiden.

METADATA för HTTP-ramrubrik översätts till JSON för enklare hantering av lyssnarramverket, även för att HTTP-rubrikparsingbibliotek är ovanligare än JSON-parsare. HTTP-metadata som endast är relevanta för relationen mellan avsändaren och Relay HTTP-gatewayen, inklusive auktoriseringsinformation, vidarebefordras inte. HTTP-begärandeorgan överförs transparent som binära WebSocket-ramar.

Lyssnaren kan svara på HTTP-begäranden med en motsvarande svarsgest.

Begäran/svar-flödet använder kontrollkanalen som standard, men kan "uppgraderas" till en distinkt rendezvous WebSocket när det behövs. Distinkta WebSocket-anslutningar förbättrar dataflödet för varje klientkonversation, men de belastar lyssnaren med fler anslutningar som behöver hanteras, vilket kanske inte är önskvärt för enkla klienter.

På kontrollkanalen är begärande- och svarsorganen begränsade till högst 64 kB i storlek. HTTP-huvudmetadata är begränsade till totalt 32 kB. Om antingen begäran eller svaret överskrider det tröskelvärdet måste lyssnaren uppgradera till en rendezvous WebSocket med en gest som motsvarar hanteringen av Accept.

För begäranden bestämmer tjänsten om begäranden ska dirigeras via kontrollkanalen. Detta inkluderar, men får inte begränsas till fall där en begäran överskrider 64 kB (rubriker plus brödtext) direkt, eller om begäran skickas med "segmenterad" överföringskodning och tjänsten har anledning att förvänta sig att begäran överskrider 64 kB eller att läsa begäran inte är omedelbar. Om tjänsten väljer att leverera begäran via rendezvous skickar den bara rendezvous-adressen till lyssnaren. Lyssnaren måste sedan upprätta rendezvous WebSocket och tjänsten levererar omedelbart hela begäran inklusive organ över rendezvous WebSocket. Svaret MÅSTE också använda rendezvous WebSocket.

För begäranden som kommer över kontrollkanalen bestämmer lyssnaren om den ska svara över kontrollkanalen eller via rendezvous. Tjänsten MÅSTE innehålla en rendezvous-adress med varje begäran som dirigeras över kontrollkanalen. Den här adressen är endast giltig för uppgradering från den aktuella begäran.

Om lyssnaren väljer att uppgradera ansluter den och levererar snabbt svaret över den etablerade rendezvous-socketen.

När rendezvous WebSocket har upprättats bör lyssnaren underhålla den för ytterligare hantering av begäranden och svar från samma klient. Tjänsten underhåller WebSocket så länge HTTPS-socketanslutningen med avsändaren bevaras och dirigerar alla efterföljande begäranden från avsändaren över den underhållna WebSocket. Om lyssnaren väljer att släppa rendezvous WebSocket från sin sida, kommer tjänsten också att släppa anslutningen till avsändaren, oavsett om en efterföljande begäran redan pågår.

Förnya åtgärd

Säkerhetstoken som måste användas för att registrera lyssnaren och underhålla kontrollkanalen kan upphöra att gälla medan lyssnaren är aktiv. Förfallodatum för token påverkar inte pågående anslutningar, men det gör att kontrollkanalen tas bort av tjänsten vid eller strax efter förfallotillfället. Åtgärden "förnya" är ett JSON-meddelande som lyssnaren kan skicka för att ersätta token som är associerad med kontrollkanalen, så att kontrollkanalen kan underhållas under längre perioder.

Pingåtgärd

Om kontrollkanalen håller sig inaktiv under en längre tid kan mellanhänder på vägen, till exempel lastbalanserare eller NAT:er, släppa TCP-anslutningen. "Ping"-åtgärden undviker att genom att skicka en liten mängd data på kanalen som påminner alla på nätverksvägen om att anslutningen är avsedd att vara vid liv, och den fungerar också som ett "live"-test för lyssnaren. Om pingen misslyckas bör kontrollkanalen betraktas som oanvändbar och lyssnaren bör återansluta.

Avsändarinteraktion

Avsändaren har två interaktioner med tjänsten: den ansluter en webbsocket eller skickar begäranden via HTTPS. Begäranden kan inte skickas via en webbsocket från avsändarrollen.

Anslut åtgärd

Åtgärden "anslut" öppnar en WebSocket på tjänsten och anger namnet på Hybrid Anslut ion och (valfritt, men krävs som standard) en säkerhetstoken som ger "Skicka"-behörighet i frågesträngen. Tjänsten interagerar sedan med lyssnaren på det sätt som beskrevs tidigare, och lyssnaren skapar en rendezvous-anslutning som är ansluten till denna WebSocket. När WebSocket har accepterats sker alla ytterligare interaktioner på webSocket med en ansluten lyssnare.

Begärandeåtgärd

För Hybrid Anslut ions som funktionen har aktiverats för kan avsändaren skicka i stort sett obegränsade HTTP-begäranden till lyssnare.

Förutom en Relay-åtkomsttoken som antingen är inbäddad i frågesträngen eller i en HTTP-rubrik i begäran är Relay helt transparent för alla HTTP-åtgärder på relayadressen och alla suffix för relayadresssökvägen, vilket ger lyssnaren fullständig kontroll över auktorisering från slutpunkt till slutpunkt och till och med HTTP-tilläggsfunktioner som CORS.

Avsändarauktorisering med Relay-slutpunkten är aktiverad som standard, men är VALFRI. Ägaren av Hybrid Anslut ion kan välja att tillåta anonyma avsändare. Tjänsten kommer att fånga upp, inspektera och ta bort auktoriseringsinformation enligt följande:

  1. Om frågesträngen innehåller ett sb-hc-token uttryck tas uttrycket ALLTID bort från frågesträngen. Det utvärderas om Relay-auktorisering är aktiverat.
  2. Om begäranderubrikerna innehåller ett ServiceBusAuthorization huvud tas huvuduttrycket ALLTID bort från rubriksamlingen. Det utvärderas om Relay-auktorisering är aktiverat.
  3. Endast om Relay-auktorisering är aktiverat, och om begäranderubrikerna innehåller ett Authorization huvud och inget av de tidigare uttrycken finns, utvärderas och tas rubriken bort. Annars skickas Authorizationalltid som den är.

Om det inte finns någon aktiv lyssnare returnerar tjänsten felkoden 502 "Felaktig gateway". Om tjänsten inte verkar hantera begäran returnerar tjänsten 504 "Gateway Timeout" efter 60 sekunder.

Interaktionssammanfattning

Resultatet av den här interaktionsmodellen är att avsändarklienten kommer ut ur handskakningen med en "ren" WebSocket, som är ansluten till en lyssnare och som inte behöver några ytterligare ingresser eller förberedelser. Den här modellen gör att praktiskt taget alla befintliga WebSocket-klientimplementeringar enkelt kan dra nytta av Hybrid Anslut ions-tjänsten genom att tillhandahålla en korrekt konstruerad URL i webSocket-klientlagret.

WebSocket för rendezvous-anslutning som lyssnaren hämtar via acceptinteraktionen är också ren och kan överlämnas till alla befintliga WebSocket-serverimplementeringar med minimal extra abstraktion som skiljer mellan "acceptera"-åtgärder på ramverkets lokala nätverkslyssnare och Hybrid Anslut ions fjärråtgärder för "acceptera".

HTTP-begäran/svarsmodellen ger avsändaren en i stort sett obegränsad HTTP-protokollyta med ett valfritt auktoriseringslager. Lyssnaren hämtar ett förparserat avsnitt för HTTP-begäranderubriken som kan omvandlas tillbaka till en nedströms HTTP-begäran eller hanteras som den är, med binära ramar med HTTP-organ. Svar använder samma format. Interaktioner med mindre än 64 kB begärande- och svarstext kan hanteras via en enda webbsocket som delas för alla avsändare. Större begäranden och svar kan hanteras med hjälp av rendezvous-modellen.

Protokollreferens

I det här avsnittet beskrivs information om protokollinteraktionerna som beskrevs tidigare.

Alla WebSocket-anslutningar görs på port 443 som en uppgradering från HTTPS 1.1, som ofta abstraheras av något WebSocket-ramverk eller API. Beskrivningen här är neutral för implementeringen, utan att föreslå något specifikt ramverk.

Lyssnarprotokoll

Lyssnarprotokollet består av två anslutningsgester och tre meddelandeåtgärder.

Anslutning till lyssnarkontrollkanal

Kontrollkanalen öppnas med att skapa en WebSocket-anslutning till:

wss://{namespace-address}/$hc/{path}?sb-hc-action=...[&sb-hc-id=...]&sb-hc-token=...

namespace-address är det fullständigt kvalificerade domännamnet för Azure Relay-namnområdet som är värd för Hybrid Anslut ion, vanligtvis i formuläret {myname}.servicebus.windows.net.

Alternativen för frågesträngsparametern är följande.

Parameter Obligatoriskt Beskrivning
sb-hc-action Ja För lyssnarrollen måste parametern vara sb-hc-action=listen
{path} Ja Sökvägen till DET URL-kodade namnområdet för den förkonfigurerade Hybrid-Anslut ion som lyssnaren ska registreras på. Det här uttrycket läggs till i den fasta $hc/ sökvägsdelen.
sb-hc-token Ja* Lyssnaren måste ange en giltig, URL-kodad Service Bus-token för delad åtkomst för namnområdet eller Hybrid Anslut ion som ger lyssnarbehörigheten.
sb-hc-id Inga Det här valfria ID:t som tillhandahålls av klienten möjliggör diagnostikspårning från slutpunkt till slutpunkt.

Om WebSocket-anslutningen misslyckas på grund av att Hybrid Anslut ion-sökvägen inte har registrerats eller en ogiltig eller saknad token, eller något annat fel, tillhandahålls felfeedback med hjälp av den vanliga http 1.1-statusfeedbackmodellen. Statusbeskrivningen innehåller ett felspårnings-ID som kan kommuniceras med Azures supportpersonal:

Kod Fel Description
404 Hittades inte Hybrid-Anslut ionssökvägen är ogiltig eller så är bas-URL:en felaktig.
401 Behörighet saknas Säkerhetstoken saknas, är felaktigt eller ogiltig.
403 Ej tillåtet Säkerhetstoken är inte giltig för den här sökvägen för den här åtgärden.
500 Internt fel Något gick fel i tjänsten.

Om WebSocket-anslutningen avsiktligt stängs av av tjänsten efter att den ursprungligen konfigurerades, kommuniceras orsaken till detta med hjälp av en lämplig Felkod för WebSocket-protokollet tillsammans med ett beskrivande felmeddelande som även innehåller ett spårnings-ID. Tjänsten stänger inte av kontrollkanalen utan ett feltillstånd. En ren avstängning styrs av klienten.

WS-status Description
1001 Hybrid-Anslut ionssökvägen har tagits bort eller inaktiverats.
1008 Säkerhetstoken har upphört att gälla och därför överträds auktoriseringsprincipen.
1011 Något gick fel i tjänsten.

Acceptera handskakning

Meddelandet "acceptera" skickas av tjänsten till lyssnaren via den tidigare etablerade kontrollkanalen som ett JSON-meddelande i en WebSocket-textram. Det finns inget svar på det här meddelandet.

Meddelandet innehåller ett JSON-objekt med namnet "accept", som definierar följande egenskaper just nu:

  • address – URL-strängen som ska användas för att upprätta WebSocket till tjänsten för att acceptera en inkommande anslutning.
  • id – den unika identifieraren för den här anslutningen. Om ID:t har angetts av avsändarklienten är det avsändarens angivna värde, annars är det ett systemgenererat värde.
  • connectHeaders – alla HTTP-huvuden som har angetts till Relay-slutpunkten av avsändaren, som även innehåller huvudena Sec-WebSocket-Protocol och Sec-WebSocket-Extensions.
{
    "accept" : {
        "address" : "wss://dc-node.servicebus.windows.net:443/$hc/{path}?...",
        "id" : "4cb542c3-047a-4d40-a19f-bdc66441e736",
        "connectHeaders" : {
            "Host" : "...",
            "Sec-WebSocket-Protocol" : "...",
            "Sec-WebSocket-Extensions" : "..."
        }
     }
}

Adress-URL:en som anges i JSON-meddelandet används av lyssnaren för att upprätta WebSocket för att acceptera eller avvisa avsändarens socket.

Acceptera socketen

För att acceptera upprättar lyssnaren en WebSocket-anslutning till den angivna adressen.

Om meddelandet "acceptera" har ett Sec-WebSocket-Protocol huvud förväntas lyssnaren endast acceptera WebSocket om det stöder det protokollet. Dessutom anges rubriken när WebSocket upprättas.

Samma sak gäller för Sec-WebSocket-Extensions rubriken. Om ramverket stöder ett tillägg bör det ange huvudet till svaret på serversidan för den nödvändiga Sec-WebSocket-Extensions handskakningen för tillägget.

URL:en måste användas som den är för att upprätta accept-socketen, men innehåller följande parametrar:

Parameter Obligatoriskt Beskrivning
sb-hc-action Ja För att acceptera en socket måste parametern vara sb-hc-action=accept
{path} Ja (se följande stycke)
sb-hc-id Inga Se föregående beskrivning av ID.

{path}är den URL-kodade namnområdessökvägen för den förkonfigurerade Hybrid-Anslut ion som lyssnaren ska registreras på. Det här uttrycket läggs till i den fasta $hc/ sökvägsdelen.

Uttrycket path kan utökas med ett suffix och ett frågesträngsuttryck som följer det registrerade namnet efter ett avgränsande snedstreck. Med den här parametern kan avsändarens klient skicka sändningsargument till den accepterande lyssnaren när det inte går att inkludera HTTP-huvuden. Förväntningen är att lyssnarramverket parsar ut den fasta sökvägsdelen och det registrerade namnet från sökvägen och gör resten, eventuellt utan några frågesträngsargument före , tillgängliga för programmet för att avgöra om anslutningen ska accepteras sb-.

Mer information finns i avsnittet "Sender Protocol".

Om det uppstår ett fel kan tjänsten svara på följande sätt:

Kod Fel Description
403 Ej tillåtet URL:en är inte giltig.
500 Internt fel Något gick fel i tjänsten

När anslutningen har upprättats stänger servern av WebSocket när avsändaren WebSocket stängs av eller med följande status:

WS-status Description
1001 Avsändarklienten stänger av anslutningen.
1001 Hybrid-Anslut ionssökvägen har tagits bort eller inaktiverats.
1008 Säkerhetstoken har upphört att gälla och därför överträds auktoriseringsprincipen.
1011 Något gick fel i tjänsten.
Avvisa socketen

Om du avvisar socketen accept efter att du har inspekterat meddelandet krävs ett liknande handskakning så att statuskoden och statusbeskrivningen som kommunicerar orsaken till avvisningen kan flöda tillbaka till avsändaren.

Det här alternativet för protokolldesign är att använda en WebSocket-handskakning (som är utformad för att sluta i ett definierat feltillstånd) så att lyssnarklientimplementeringar kan fortsätta att förlita sig på en WebSocket-klient och inte behöver använda en extra, tom HTTP-klient.

Om du vill avvisa socketen tar klienten adress-URI:n från accept meddelandet och lägger till två frågesträngsparametrar i det, enligt följande:

Param Obligatoriskt Beskrivning
sb-hc-statusCode Ja Numerisk HTTP-statuskod.
sb-hc-statusDescription Ja Mänsklig läsbar orsak till avslaget.

Den resulterande URI:n används sedan för att upprätta en WebSocket-anslutning.

När handskakningen slutförs korrekt misslyckas den avsiktligt med HTTP-felkoden 410, eftersom ingen WebSocket har upprättats. Om något går fel beskriver följande koder felet:

Kod Fel Description
403 Ej tillåtet URL:en är inte giltig.
500 Internt fel Något gick fel i tjänsten.

Begärandemeddelande

Meddelandet request skickas av tjänsten till lyssnaren över kontrollkanalen. Samma meddelande skickas också via rendezvous WebSocket när det har upprättats.

Består request av två delar: en rubrik och binära brödtextramar. Om det inte finns någon brödtext utelämnas brödtextramarna. Den booleska body egenskapen anger om en brödtext finns i begärandemeddelandet.

För en begäran med en begärandetext kan strukturen se ut så här:

----- Web Socket text frame ----
{
    "request" :
    {
        "body" : true,
        ...
    }
}
----- Web Socket binary frame ----
FEFEFEFEFEFEFEFEFEFEF...
----- Web Socket binary frame ----
FEFEFEFEFEFEFEFEFEFEF...
----- Web Socket binary frame -FIN
FEFEFEFEFEFEFEFEFEFEF...
----------------------------------

Lyssnaren MÅSTE hantera mottagandet av begärandetexten uppdelad över flera binära bildrutor (se WebSocket-fragment). Begäran avslutas när en binär ram med FIN-flagguppsättningen har tagits emot.

För en begäran utan brödtext finns det bara en textram.

----- Web Socket text frame ----
{
    "request" :
    {
        "body" : false,
        ...
    }
}
----------------------------------

JSON-innehållet för request är följande:

  • address – URI-sträng. Det är den rendezvous-adress som ska användas för den här begäran. Om den inkommande begäran är större än 64 kB lämnas resten av det här meddelandet tomt och klienten MÅSTE initiera ett rendezvous-handskakning motsvarande åtgärden accept som beskrivs nedan. Tjänsten placerar sedan hela request på den etablerade webbsocketen. Om svaret kan förväntas överstiga 64 kB måste lyssnaren också initiera ett rendezvous-handskakning och sedan överföra svaret över den etablerade webbsocketen.

  • id – sträng. Den unika identifieraren för den här begäran.

  • requestHeaders – det här objektet innehåller alla HTTP-huvuden som har angetts till slutpunkten av avsändaren, med undantag för auktoriseringsinformation enligt beskrivningen ovan, och rubriker som är strikt relaterade till anslutningen till gatewayen. Mer specifikt tas ALLA rubriker som definierats eller reserverats i RFC7230, förutom Via, bort och vidarebefordras inte:

    • Connection (RFC7230, avsnitt 6.1)
    • Content-Length (RFC7230, avsnitt 3.3.2)
    • Host (RFC7230, avsnitt 5.4)
    • TE (RFC7230, avsnitt 4.3)
    • Trailer (RFC7230, avsnitt 4.4)
    • Transfer-Encoding (RFC7230, avsnitt 3.3.1)
    • Upgrade (RFC7230, avsnitt 6.7)
    • Close (RFC7230, avsnitt 8.1)
  • requestTarget – sträng. Den här egenskapen innehåller begärandemålet (RFC7230, avsnitt 5.3) i begäran. Den innehåller frågesträngsdelen, som tas bort från ALLA sb-hc- prefixparametrar.

  • method – string. Det här är metoden för begäran, per RFC7231, avsnitt 4. Metoden CONNECT FÅR INTE användas.

  • body – boolesk. Anger om en eller flera binära brödtextramar följer.

{
    "request" : {
        "address" : "wss://dc-node.servicebus.windows.net:443/$hc/{path}?...",
        "id" : "42c34cb5-7a04-4d40-a19f-bdc66441e736",
        "requestTarget" : "/abc/def?myarg=value&otherarg=...",
        "method" : "GET",
        "requestHeaders" : {
            "Host" : "...",
            "Content-Type" : "...",
            "User-Agent" : "..."
        },
        "body" : true
     }
}
Svara på begäranden

Mottagaren MÅSTE svara. Upprepad underlåtenhet att svara på begäranden vid underhåll av anslutningen kan leda till att lyssnaren blockeras.

Svar kan skickas i valfri ordning, men varje begäran måste besvaras inom 60 sekunder eller så rapporteras leveransen ha misslyckats. Tidsgränsen på 60 sekunder räknas tills ramen response har tagits emot av tjänsten. Ett pågående svar med flera binära bildrutor kan inte bli inaktivt i mer än 60 sekunder eller avslutas.

Om begäran tas emot via kontrollkanalen måste svaret antingen skickas på kontrollkanalen där begäran togs emot eller så måste den skickas via en rendezvous-kanal.

Svaret är ett JSON-objekt med namnet "response". Reglerna för att hantera brödtextinnehåll är precis som med request meddelandet och baserat på body egenskapen.

  • requestId – sträng. KRÄVS. Egenskapsvärdet id för meddelandet request som besvaras.
  • statusCode – tal. KRÄVS. en numerisk HTTP-statuskod som anger resultatet av meddelandet. Alla statuskoder för RFC7231, avsnitt 6 är tillåtna, förutom 502 "Felaktig gateway" och 504 "Gateway Timeout".
  • statusDescription – sträng. VALFRI. HTTP-statuskod orsaksfras per RFC7230, avsnitt 3.1.2
  • responseHeaders – HTTP-huvuden som ska anges i ett externt HTTP-svar. Precis som requestmed får RFC7230 definierade rubriker INTE användas.
  • body – boolesk. Anger om binära brödtextramar följer(er).
----- Web Socket text frame ----
{
    "response" : {
        "requestId" : "42c34cb5-7a04-4d40-a19f-bdc66441e736",
        "statusCode" : "200",
        "responseHeaders" : {
            "Content-Type" : "application/json",
            "Content-Encoding" : "gzip"
        }
         "body" : true
     }
}
----- Web Socket binary frame -FIN
{ "hey" : "mydata" }
----------------------------------
Svara via rendezvous

För svar som överskrider 64 kB måste svaret levereras via en rendezvous socket. Om begäran överskrider 64 kB och den request enda innehåller adressfältet måste en rendezvous-socket upprättas för att hämta request. När en rendezvous-socket har upprättats måste svar på respektive klient och efterföljande begäranden från respektive klient levereras via rendezvous-socketen medan den kvarstår.

address URL:en i request måste användas som den är för att upprätta rendezvous-socketen, men innehåller följande parametrar:

Parameter Obligatoriskt Beskrivning
sb-hc-action Ja För att acceptera en socket måste parametern vara sb-hc-action=request

Om det uppstår ett fel kan tjänsten svara på följande sätt:

Kod Fel Beskrivning
400 Ogiltig begäran Okänd åtgärd eller url är inte giltig.
403 Ej tillåtet URL:en har upphört att gälla.
500 Internt fel Något gick fel i tjänsten

När anslutningen har upprättats stänger servern av WebSocket när klientens HTTP-socket stängs av eller med följande status:

WS-status Description
1001 Avsändarklienten stänger av anslutningen.
1001 Hybrid-Anslut ionssökvägen har tagits bort eller inaktiverats.
1008 Säkerhetstoken har upphört att gälla och därför överträds auktoriseringsprincipen.
1011 Något gick fel i tjänsten.

Förnyelse av lyssnartoken

När lyssnartoken snart upphör att gälla kan den ersätta den genom att skicka ett textramsmeddelande till tjänsten via den etablerade kontrollkanalen. Meddelandet innehåller ett JSON-objekt med namnet renewToken, som definierar följande egenskap just nu:

  • token – en giltig, URL-kodad Service Bus-token för delad åtkomst för namnområdet eller Hybrid Anslut ion som ger lyssnarrätt.
{
  "renewToken": {
    "token":
      "SharedAccessSignature sr=http%3a%2f%2fcontoso.servicebus.windows.net%2fhyco%2f&sig=XXXXXXXXXX%3d&se=1471633754&skn=SasKeyName"
  }
}

Om tokenverifieringen misslyckas nekas åtkomst och molntjänsten stänger kontrollkanalen WebSocket med ett fel. Annars finns det inget svar.

WS-status Description
1008 Säkerhetstoken har upphört att gälla och därför överträds auktoriseringsprincipen.

Anslutningsprotokoll för Web Socket

Avsändarprotokollet är i praktiken identiskt med hur en lyssnare upprättas. Målet är maximal transparens för WebSocket från slutpunkt till slutpunkt. Adressen som ska anslutas till är samma som för lyssnaren, men "åtgärden" skiljer sig och token behöver en annan behörighet:

wss://{namespace-address}/$hc/{path}?sb-hc-action=...&sb-hc-id=...&sb-hc-token=...

Namnområdesadressen är det fullständigt kvalificerade domännamnet för Azure Relay-namnområdet som är värd för Hybrid Anslut ion, vanligtvis i formuläret {myname}.servicebus.windows.net.

Begäran kan innehålla godtyckliga extra HTTP-huvuden, inklusive programdefinierade. Alla angivna huvuden flödar till lyssnaren och kan hittas i connectHeader objektet för accept-kontrollmeddelandet .

Alternativen för frågesträngsparametern är följande:

Param Obligatoriskt? Description
sb-hc-action Ja För avsändarrollen måste parametern vara sb-hc-action=connect.
{path} Ja (se följande stycke)
sb-hc-token Ja* Lyssnaren måste ange en giltig, URL-kodad Service Bus-token för delad åtkomst för namnområdet eller Hybrid Anslut ion som ger behörigheten Skicka.
sb-hc-id Inga Ett valfritt ID som möjliggör diagnostikspårning från slutpunkt till slutpunkt och görs tillgängligt för lyssnaren under handskakningen.

{path} är den URL-kodade namnområdessökvägen för den förkonfigurerade Hybrid-Anslut ion som lyssnaren ska registreras på. Uttrycket path kan utökas med ett suffix och ett frågesträngsuttryck för att kommunicera vidare. Om Hybrid Anslut ion registreras under sökvägen hycopath kan uttrycket följas hyco/suffix?param=value&... av frågesträngsparametrarna som definieras här. Ett fullständigt uttryck kan då vara följande:

wss://{namespace-address}/$hc/hyco/suffix?param=value&sb-hc-action=...[&sb-hc-id=...&]sb-hc-token=...

Uttrycket path skickas till lyssnaren i adress-URI:n som finns i kontrollmeddelandet "acceptera".

Om WebSocket-anslutningen misslyckas på grund av att Hybrid Anslut ion-sökvägen inte har registrerats, en ogiltig eller saknad token eller något annat fel, tillhandahålls felfeedback med hjälp av den vanliga http 1.1-statusfeedbackmodellen. Statusbeskrivningen innehåller ett felspårnings-ID som kan kommuniceras med Azures supportpersonal:

Kod Fel Description
404 Hittades inte Hybrid-Anslut ionssökvägen är ogiltig eller så är bas-URL:en felaktig.
401 Behörighet saknas Säkerhetstoken saknas, är felaktigt eller ogiltig.
403 Ej tillåtet Säkerhetstoken är inte giltig för den här sökvägen och för den här åtgärden.
500 Internt fel Något gick fel i tjänsten.

Om WebSocket-anslutningen avsiktligt stängs av av tjänsten efter att den har konfigurerats kommuniceras orsaken till detta med hjälp av en lämplig Felkod för WebSocket-protokollet tillsammans med ett beskrivande felmeddelande som även innehåller ett spårnings-ID.

WS-status Description
1000 Lyssnaren stänger av socketen.
1001 Hybrid-Anslut ionssökvägen har tagits bort eller inaktiverats.
1008 Säkerhetstoken har upphört att gälla, så auktoriseringsprincipen överträds.
1011 Något gick fel i tjänsten.

HTTP-begärandeprotokoll

Protokollet för HTTP-begäran tillåter godtyckliga HTTP-begäranden, förutom protokolluppgraderingar. HTTP-begäranden riktas mot entitetens vanliga körningsadress, utan det $hc infix som används för WebSocket-hybridanslutningar.

https://{namespace-address}/{path}?sb-hc-token=...

Namnområdesadressen är det fullständigt kvalificerade domännamnet för Azure Relay-namnområdet som är värd för Hybrid Anslut ion, vanligtvis i formuläret {myname}.servicebus.windows.net.

Begäran kan innehålla godtyckliga extra HTTP-huvuden, inklusive programdefinierade. Alla angivna huvuden, förutom de som definierats direkt i RFC7230 (se Begärandemeddelande) flödar till lyssnaren requestHeader och kan hittas i objektet för begärandemeddelandet.

Alternativen för frågesträngsparametern är följande:

Param Obligatoriskt? Description
sb-hc-token Ja* Lyssnaren måste ange en giltig, URL-kodad Service Bus-token för delad åtkomst för namnområdet eller Hybrid Anslut ion som ger behörigheten Skicka.

Token kan också överföras i antingen ServiceBusAuthorization HTTP-huvudet eller Authorization HTTP-huvudet. Token kan utelämnas om Hybrid Anslut ion har konfigurerats för att tillåta anonyma begäranden.

Eftersom tjänsten effektivt fungerar som en proxy, även om den inte är en sann HTTP-proxy, lägger den antingen till ett Via huvud eller kommenterar det befintliga Via huvudet som är kompatibelt med RFC7230, avsnitt 5.7.1. Tjänsten lägger till värdnamnet för Relay-namnområdet till Via.

Kod Meddelande Description
200 OK Begäran har hanterats av minst en lyssnare.
202 Godkänd Begäran har godkänts av minst en lyssnare.

Om det uppstår ett fel kan tjänsten svara på följande sätt. Om svaret kommer från tjänsten eller från lyssnaren kan identifieras via närvaro av Via huvudet. Om rubriken finns kommer svaret från lyssnaren.

Kod Fel Description
404 Hittades inte Hybrid-Anslut ionssökvägen är ogiltig eller så är bas-URL:en felaktig.
401 Behörighet saknas Säkerhetstoken saknas, är felaktigt eller ogiltig.
403 Ej tillåtet Säkerhetstoken är inte giltig för den här sökvägen och för den här åtgärden.
500 Internt fel Något gick fel i tjänsten.
503 Felaktig gateway Det gick inte att dirigera begäran till någon lyssnare.
504 Tidsgräns för gateway Begäran dirigerades till en lyssnare, men lyssnaren bekräftade inte mottagandet under den tid som krävdes.

Nästa steg