Azure Relay Karma Bağlan ions protokolü

Azure Relay, Azure Service Bus platformunun önemli özellik yapılarından biridir. Relay'in yeni Karma Bağlan ions özelliği, HTTP ve WebSockets tabanlı güvenli, açık bir protokol evrimidir. Özel bir protokol temeli üzerinde oluşturulan eski, eşit adlandırılmış BizTalk Services özelliğinin yerini alır. Karma Bağlan yonlarının Azure Uygulaması Hizmetleri ile tümleştirilmesi olduğu gibi çalışmaya devam edecektir.

Karma Bağlan ions, iki yönlü, istek-yanıt ve ikili akış iletişimi ile iki ağa bağlı uygulama arasında basit veri birimi akışı sağlar. Her iki taraf da NAT'lerin veya güvenlik duvarlarının arkasında olabilir.

Bu makalede, dinleyici ve gönderen rollerindeki istemcileri bağlamak için Karma Bağlan ions geçişi ile istemci tarafı etkileşimleri açıklanmaktadır. Ayrıca dinleyicilerin yeni bağlantıları ve istekleri nasıl kabul ettilerini de açıklar.

Etkileşim modeli

Hibrit Bağlan ions geçişi, Azure bulutunda tarafların kendi ağlarının perspektifinden keşfedebileceği ve bağlanabileceği bir buluşma noktası sağlayarak iki taraf arasında bağlantı kurar. Bu ve diğer belgelerde, API'lerde ve ayrıca Azure portalında randevu noktasına "Karma Bağlan ion" adı verilir. Karma Bağlan ions hizmet uç noktası, bu makalenin geri kalanında "hizmet" olarak adlandırılır.

Hizmet, Web Yuvası bağlantılarının ve HTTP(S) isteklerinin ve yanıtlarının geçirilmesine olanak tanır.

Etkileşim modeli, diğer birçok ağ API'sinin oluşturduğu sıfatlara dayandırılır. İlk olarak gelen bağlantıları işlemeye hazır olduğunu belirten ve daha sonra geldikçe bunları kabul eden bir dinleyici vardır. Diğer tarafta, bir istemci dinleyiciye bağlanır ve çift yönlü bir iletişim yolu oluşturmak için bu bağlantının kabul edilmesi beklenir. "Bağlan," "Dinle" ve "Kabul Et" çoğu yuva API'sinde bulduğunuz terimlerin aynılarıdır.

Geçişli iletişim modellerinde, hizmet uç noktasına giden bağlantılar yapan taraflardan biri vardır. Bu, "dinleyiciyi" aynı zamanda birlikte kullanımda "istemci" yapar ve diğer terminoloji aşırı yüklemelerine de neden olabilir. Bu nedenle Karma Bağlan ions için kullanılan kesin terminoloji aşağıdaki gibidir:

Bir bağlantının her iki tarafındaki programlar hizmete yönelik istemciler olduğundan "istemciler" olarak adlandırılır. Bekleyen ve bağlantıları kabul eden istemci "dinleyicidir" veya "dinleyici rolünde" olduğu söylenir. Hizmet aracılığıyla dinleyiciye yönelik yeni bir bağlantı başlatan istemci "gönderen" olarak adlandırılır veya "gönderen rolündedir."

Dinleyici etkileşimleri

Dinleyicinin hizmetle beş etkileşimi vardır; tüm kablo ayrıntıları, bu makalenin devamında başvuru bölümünde açıklanmıştır.

Hizmetten Dinleme, Kabul Et ve İstek iletileri alınır. Yenile ve Ping işlemleri dinleyici tarafından gönderilir.

İletiyi dinleme

Bir dinleyicinin bağlantıları kabul etmeye hazır olduğunu hizmete hazır olduğunu belirtmek için giden bir WebSocket bağlantısı oluşturur. Bağlantı el sıkışması, Geçiş ad alanında yapılandırılan bir Karma Bağlan ion'ın adını ve bu ad üzerinde "Dinle"yi veren bir güvenlik belirteci taşır.

WebSocket hizmet tarafından kabul edildiğinde, kayıt tamamlanır ve oluşturulan WebSocket sonraki tüm etkileşimleri etkinleştirmek için "denetim kanalı" olarak canlı tutulur. Hizmet, bir Karma Bağlan için en fazla 25 eşzamanlı dinleyiciye izin verir. AppHooks kotası belirlenecek.

Karma Bağlan ions için, iki veya daha fazla etkin dinleyici varsa, gelen bağlantılar rastgele sırayla bunlar arasında dengelenir; en iyi çabayla adil dağıtım denenir.

İletiyi kabul et

Bir gönderen hizmette yeni bir bağlantı açtığında, hizmet Karma Bağlan üzerinde etkin dinleyicilerden birini seçer ve bildirir. Bu bildirim, açık denetim kanalı üzerinden dinleyiciye JSON iletisi olarak gönderilir. İleti, dinleyicinin bağlantıyı kabul etmek için bağlanması gereken WebSocket uç noktasının URL'sini içerir.

URL, ek bir çalışma olmadan doğrudan dinleyici tarafından kullanılabilir ve kullanılmalıdır. Kodlanmış bilgiler, gönderen bağlantının uçtan uca kurulmasını beklemeye istekli olduğu sürece yalnızca kısa bir süre için geçerlidir. Varsaymak için en fazla 30 saniyedir. URL yalnızca bir başarılı bağlantı girişimi için kullanılabilir. Randevu URL'si ile WebSocket bağlantısı kurulduğu anda, bu WebSocket üzerindeki diğer tüm etkinlikler gönderenden ve gönderene iletilir. Bu davranış, hizmet tarafından herhangi bir müdahale veya yorum yapılmadan gerçekleşir.

İstek iletisi

WebSocket bağlantılarına ek olarak, bu özellik Karma Bağlan ion'da açıkça etkinleştirilmişse dinleyici bir gönderenden HTTP isteği çerçeveleri de alabilir.

HTTP desteğine sahip Karma Bağlan ions'a ekleyen dinleyiciler hareketi request işlemeLIDIR. İşlenmeyen request ve bu nedenle bağlıyken yinelenen zaman aşımı hatalarına neden olan bir dinleyici gelecekte hizmet tarafından engellenebilir.

HTTP üst bilgi ayrıştırma kitaplıkları JSON ayrıştırıcılarından daha nadir olduğundan, HTTP çerçeve üst bilgisi meta verileri dinleyici çerçevesi tarafından daha basit işleme için JSON'a çevrilir. Yetkilendirme bilgileri de dahil olmak üzere yalnızca gönderen ile Geçiş HTTP ağ geçidi arasındaki ilişkiyle ilgili HTTP meta verileri iletilir. HTTP istek gövdeleri, ikili WebSocket çerçeveleri olarak saydam olarak aktarılır.

Dinleyici, eşdeğer bir yanıt hareketi kullanarak HTTP isteklerine yanıt verebilir.

İstek/yanıt akışı varsayılan olarak denetim kanalını kullanır, ancak gerektiğinde ayrı bir randevu WebSocket'e "yükseltilebilir". Ayrı WebSocket bağlantıları her istemci konuşması için aktarım hızını artırır, ancak dinleyiciye işlenmesi gereken daha fazla bağlantı yükler ve bu da basit istemciler için istek duymayabilir.

Denetim kanalında istek ve yanıt gövdelerinin boyutu en fazla 64 kB ile sınırlıdır. HTTP üst bilgisi meta verileri toplam 32 kB ile sınırlıdır. İstek veya yanıt bu eşiği aşarsa, dinleyici Kabul Et'i işlemeye eşdeğer bir hareket kullanarak randevulu bir WebSocket'e yükseltILMELIDIR.

İstekler için, isteklerin denetim kanalı üzerinden yönlendirilip yönlendirmeyeceğine hizmet karar verir. Buna bir isteğin doğrudan 64 kB'yi (üst bilgi ve gövde) aştığı veya isteğin "öbeklenmiş" aktarım kodlaması ile gönderilip gönderilmediği ve hizmetin isteğin 64 kB'yi aşmasını beklemesi veya isteğin okunmasının anlık olmaması durumlarıyla sınırlı olmayabilir. Hizmet isteği randevu yerine teslim etmeyi seçerse, yalnızca randevu adresini dinleyiciye geçirir. Ardından dinleyici, randevu WebSocket'ini KURMALIDIR ve hizmet, randevulu WebSocket üzerinden gövdeler de dahil olmak üzere isteğin tamamını hemen teslim eder. Yanıt, randevulu WebSocket'i de kullanmalıdır.

Denetim kanalı üzerinden gelen istekler için dinleyici, denetim kanalı üzerinden mi yoksa randevu yoluyla mı yanıt vereceğine karar verir. Hizmet, denetim kanalı üzerinden yönlendirilen her isteği içeren bir randevu adresi içermelidir. Bu adres yalnızca geçerli istekten yükseltme için geçerlidir.

Dinleyici yükseltmeyi seçerse bağlanır ve oluşturulan randevu yuvası üzerinden yanıtı hemen teslim eder.

Randevu WebSocket oluşturulduktan sonra, dinleyici aynı istemciden gelen isteklerin ve yanıtların daha fazla işlenmesi için bunu korumalıdır. Hizmet, gönderenle HTTPS yuva bağlantısı devam ettikçe WebSocket'i korur ve bu gönderenden gelen sonraki tüm istekleri bakımlı WebSocket üzerinden yönlendirir. Dinleyici, randevulu WebSocket'i kendi tarafından bırakmayı seçerse, sonraki bir isteğin devam edip etmediğine bakılmaksızın hizmet, gönderene bağlantıyı da bırakır.

Yenileme işlemi

Dinleyiciyi kaydetmek ve denetim kanalını korumak için kullanılması gereken güvenlik belirtecinin süresi dinleyici etkinken dolabilir. Belirteç süre sonu devam eden bağlantıları etkilemez, ancak denetim kanalının süre sonu anında veya kısa bir süre sonra hizmet tarafından bırakılmasına neden olur. "Yenile" işlemi, dinleyicinin denetim kanalıyla ilişkili belirteci değiştirmek için gönderebileceği bir JSON iletisidir, böylece denetim kanalı uzun süreler boyunca korunabilir.

Ping işlemi

Denetim kanalı uzun süre boşta kalırsa, yük dengeleyiciler veya NAT'ler gibi aracılar TCP bağlantısını bırakabilir. "Ping" işlemi, kanaldaki herkese bağlantının canlı olması gerektiğini anımsatan az miktarda veri göndererek bunu önler ve dinleyici için "canlı" bir test görevi görür. Ping başarısız olursa, denetim kanalı kullanılamaz olarak kabul edilmeli ve dinleyici yeniden bağlanmalıdır.

Gönderen etkileşimi

Gönderenin hizmetle iki etkileşimi vardır: Bir Web Yuvasını bağlar veya HTTPS aracılığıyla istek gönderir. İstekler, gönderen rolünden bir Web Yuvası üzerinden gönderilemiyor.

Bağlan işlemi

"Bağlan" işlemi hizmette bir WebSocket açar ve Karma Bağlan ion adını ve (isteğe bağlı olarak, ancak varsayılan olarak gereklidir) sorgu dizesinde "Gönder" iznini veren bir güvenlik belirteci sağlar. Hizmet daha sonra dinleyiciyle daha önce açıklandığı şekilde etkileşim kurar ve dinleyici bu WebSocket ile birleştirilmiş bir randevu bağlantısı oluşturur. WebSocket kabul edildikten sonra, bu WebSocket üzerindeki diğer tüm etkileşimler bağlı bir dinleyiciyle olur.

İstek işlemi

Özelliğin etkinleştirildiği Karma Bağlan ions için, gönderen dinleyicilere büyük ölçüde kısıtlanmamış HTTP istekleri gönderebilir.

Sorgu dizesine veya isteğin HTTP üst bilgisine eklenmiş bir Geçiş erişim belirteci dışında Geçiş, Geçiş adresi üzerindeki tüm HTTP işlemlerine ve Geçiş adresi yolunun tüm sonekleri için tamamen saydamdır ve dinleyiciyi uçtan uca yetkilendirmenin ve hatta CORS gibi HTTP uzantısı özelliklerinin tam denetiminde bırakır.

Geçiş uç noktası ile gönderen yetkilendirmesi varsayılan olarak açıktır, ancak İsteğE BAĞLI'dır. Karma Bağlan ion sahibi anonim gönderenlere izin vermeyi seçebilir. Hizmet, yetkilendirme bilgilerini şu şekilde durdurur, inceler ve şeritler:

  1. Sorgu dizesi bir sb-hc-token ifade içeriyorsa, ifade HER ZAMAN sorgu dizesinden çıkarılır. Geçiş yetkilendirmesi açıksa değerlendirilir.
  2. İstek üst bilgileri üst ServiceBusAuthorization bilgi içeriyorsa, üst bilgi ifadesi HER ZAMAN üst bilgi koleksiyonundan çıkarılır. Geçiş yetkilendirmesi açıksa değerlendirilir.
  3. Yalnızca Geçiş yetkilendirmesi açıksa ve istek üst bilgileri üst Authorization bilgi içeriyorsa ve önceki ifadelerden hiçbiri mevcut değilse, üst bilgi değerlendirilir ve çıkarılır. Aksi takdirde, her Authorizationzaman olduğu gibi geçirilir.

Etkin dinleyici yoksa hizmet 502 "Hatalı Ağ Geçidi" hata kodu döndürür. Hizmet isteği işleyecek şekilde görünmüyorsa, hizmet 60 saniye sonra 504 "Ağ Geçidi Zaman Aşımı" döndürür.

Etkileşim özeti

Bu etkileşim modelinin sonucu, gönderen istemcinin bir dinleyiciye bağlı olan ve daha fazla ön hazırlık veya hazırlık gerektirmeyen "temiz" bir WebSocket ile el sıkışmadan çıkmasıdır. Bu model, mevcut tüm WebSocket istemci uygulamalarının, WebSocket istemci katmanına doğru şekilde oluşturulmuş bir URL sağlayarak Karma Bağlan ions hizmetinden hemen yararlanmasını sağlar.

Dinleyicinin kabul etkileşimi aracılığıyla elde ettiği randevu bağlantısı WebSocket de temizdir ve çerçevelerinin yerel ağ dinleyicilerindeki "kabul et" işlemlerini ve Karma Bağlan ions uzak "kabul etme" işlemlerini birbirinden ayıran bazı en düşük düzeyde fazladan soyutlamayla mevcut herhangi bir WebSocket sunucu uygulamasına teslim edilebilir.

HTTP isteği/yanıt modeli, gönderene İsteğE BAĞLI yetkilendirme katmanına sahip büyük ölçüde kısıtlanmamış bir HTTP protokolü yüzey alanı verir. Dinleyici, HTTP gövdelerini taşıyan ikili çerçevelerle aşağı akış HTTP isteğine geri dönüştürülebilen veya olduğu gibi işlenebilen önceden ayrıştırılmış bir HTTP isteği üst bilgisi bölümü alır. Yanıtlar aynı biçimi kullanır. 64 KB'tan az istek ve yanıt gövdesine sahip etkileşimler, tüm gönderenler için paylaşılan tek bir Web Yuvası üzerinden işlenebilir. Daha büyük istekler ve yanıtlar, randevu modeli kullanılarak işlenebilir.

Protokol başvurusu

Bu bölümde, daha önce açıklanan protokol etkileşimlerinin ayrıntıları açıklanmaktadır.

Tüm WebSocket bağlantıları, genellikle bazı WebSocket çerçeveleri veya API'leri tarafından soyutlanan HTTPS 1.1'den yükseltme olarak 443 numaralı bağlantı noktasında yapılır. Buradaki açıklama, belirli bir çerçeve önermeden uygulamanın tarafsız kalmasını sağlar.

Dinleyici protokolü

Dinleyici protokolü iki bağlantı hareketi ve üç ileti işlemi içerir.

Dinleyici denetimi kanal bağlantısı

Denetim kanalı, aşağıdakilere yönelik bir WebSocket bağlantısı oluşturularak açılır:

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

namespace-address, genellikle biçimindeki {myname}.servicebus.windows.netKarma Bağlan ion'ı barındıran Azure Relay ad alanının tam etki alanı adıdır.

Sorgu dizesi parametre seçenekleri aşağıdaki gibidir.

Parametre Zorunlu Veri Akışı Açıklaması
sb-hc-action Evet Dinleyici rolü için parametresi sb-hc-action=listen olmalıdır
{path} Evet Bu dinleyiciyi kaydetmek için önceden yapılandırılmış Karma Bağlan ion'ın URL ile kodlanmış ad alanı yolu. Bu ifade sabit $hc/ yol bölümüne eklenir.
sb-hc-token Evet* Dinleyici, ad alanı veya Karma Bağlan için Dinleme hakkı veren geçerli, URL ile kodlanmış bir Service Bus Paylaşılan Erişim Belirteci sağlamalıdır.
sb-hc-id Hayır İstemci tarafından sağlanan bu isteğe bağlı kimlik, uçtan uca tanılama izlemeyi etkinleştirir.

WebSocket bağlantısı Karma Bağlan ion yolunun kaydedilmemesi ya da geçersiz veya eksik bir belirteç ya da başka bir hata nedeniyle başarısız olursa, hata geri bildirimi normal HTTP 1.1 durum geri bildirim modeli kullanılarak sağlanır. Durum açıklaması, Azure desteği personeline iletilebilen bir hata izleme kimliği içerir:

Kod Hata Tanım
404 Bulunamadı Karma Bağlan yolu geçersiz veya temel URL yanlış biçimlendirilmiş.
401 Yetkisiz Güvenlik belirteci eksik, hatalı biçimlendirilmiş veya geçersiz.
403 Yasak Güvenlik belirteci bu eylem için bu yol için geçerli değil.
500 İç Hata Hizmette bir sorun oluştu.

WebSocket bağlantısı başlangıçta ayarlandıktan sonra hizmet tarafından kasıtlı olarak kapatılırsa, bunun nedeni uygun bir WebSocket protokolü hata kodu ve bir izleme kimliği de içeren açıklayıcı bir hata iletisi kullanılarak iletilir. Hizmet, bir hata koşuluyla karşılaşmadan denetim kanalını kapatmaz. Tüm temiz kapatmalar istemci denetimindedir.

WS Durumu Tanım
1001 Karma Bağlan ion yolu silindi veya devre dışı bırakıldı.
1008 Güvenlik belirtecinin süresi doldu, bu nedenle yetkilendirme ilkesi ihlal edildi.
1011 Hizmette bir sorun oluştu.

El sıkışmayı kabul et

"Kabul et" bildirimi, hizmet tarafından daha önce oluşturulmuş denetim kanalı üzerinden dinleyiciye WebSocket metin çerçevesinde JSON iletisi olarak gönderilir. Bu iletiye yanıt yok.

İleti, şu anda aşağıdaki özellikleri tanımlayan "accept" adlı bir JSON nesnesi içerir:

  • address – Gelen bağlantıyı kabul etmek üzere hizmete WebSocket oluşturmak için kullanılacak URL dizesi.
  • id – bu bağlantının benzersiz tanımlayıcısı. Kimlik gönderen istemcisi tarafından sağlandıysa, gönderen tarafından sağlanan değerdir, aksi takdirde sistem tarafından oluşturulan bir değerdir.
  • connectHeaders – Gönderen tarafından Geçiş uç noktasına sağlanan ve Sec-WebSocket-Protocol ve Sec-WebSocket-Extensions üst bilgilerini de içeren tüm HTTP üst bilgileri.
{
    "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" : "..."
        }
     }
}

JSON iletisinde sağlanan adres URL'si dinleyici tarafından gönderen yuvasını kabul etmek veya reddetmek için WebSocket'i oluşturmak için kullanılır.

Yuvayı kabul etme

Kabul etmek için dinleyici, sağlanan adrese bir WebSocket bağlantısı kurar.

"Kabul et" iletisi bir Sec-WebSocket-Protocol üst bilgi taşıyorsa, dinleyicinin yalnızca bu protokolü destekliyorsa WebSocket'i kabul ediyor olması beklenir. Ayrıca, WebSocket oluşturulurken üst bilgiyi ayarlar.

Aynı durum üst bilgi için Sec-WebSocket-Extensions de geçerlidir. Çerçeve bir uzantıyı destekliyorsa, üst bilgiyi uzantı için gerekli Sec-WebSocket-Extensions el sıkışmasının sunucu tarafı yanıtına ayarlamalıdır.

URL, kabul edilen yuvayı oluşturmak için olduğu gibi kullanılmalıdır, ancak aşağıdaki parametreleri içerir:

Parametre Zorunlu Veri Akışı Açıklaması
sb-hc-action Evet Yuva kabul etmek için parametresinin sb-hc-action=accept
{path} Evet (aşağıdaki paragrafa bakın)
sb-hc-id Hayır Kimliğin önceki açıklamasına bakın.

{path}, bu dinleyicinin kaydedildiği önceden yapılandırılmış Karma Bağlan ion'un URL ile kodlanmış ad alanı yoludur. Bu ifade sabit $hc/ yol bölümüne eklenir.

İfade path , eğik çizgi ayırdıktan sonra kayıtlı adı izleyen bir sonek ve sorgu dizesi ifadesiyle genişletilebilir. Bu parametre, gönderen istemcinin HTTP üst bilgilerini eklemek mümkün olmadığında dağıtım bağımsız değişkenlerini kabul eden dinleyiciye geçirmesini sağlar. Beklenti, dinleyici çerçevesinin sabit yol bölümünü ve kayıtlı adı yoldan ayrıştırıp kalan adı, büyük olasılıkla tarafından ön ekli sb-sorgu dizesi bağımsız değişkeni olmadan bağlantıyı kabul edip etmeyeceğine karar vermek için uygulamanın kullanımına sunulmuş olmasıdır.

Daha fazla bilgi için aşağıdaki "Gönderen Protokolü" bölümüne bakın.

Bir hata varsa hizmet aşağıdaki gibi yanıtlayabilir:

Kod Hata Tanım
403 Yasak URL geçerli değil.
500 İç Hata Hizmette bir sorun oluştu

Bağlantı kurulduktan sonra, gönderen WebSocket kapatıldığında veya aşağıdaki durumdayken sunucu WebSocket'i kapatır:

WS Durumu Tanım
1001 Gönderen istemci bağlantıyı kapatır.
1001 Karma Bağlan ion yolu silindi veya devre dışı bırakıldı.
1008 Güvenlik belirtecinin süresi doldu, bu nedenle yetkilendirme ilkesi ihlal edildi.
1011 Hizmette bir sorun oluştu.
Yuva reddedilme

İletiyi inceledikten sonra yuvayı reddetmek accept için benzer bir el sıkışması gerekir, böylece reddetmenin nedenini belirten durum kodu ve durum açıklaması gönderene geri akabilir.

Burada protokol tasarım seçimi, dinleyici istemci uygulamalarının bir WebSocket istemcisine güvenmeye devam edebilmesi ve ek, çıplak bir HTTP istemcisi kullanması gerekmeyecek şekilde webSocket el sıkışması (tanımlı bir hata durumunda sona erecek şekilde tasarlanmıştır) kullanmaktır.

Yuvayı reddetmek için istemci, iletiden adres URI'sini accept alır ve iki sorgu dizesi parametresi ekler:

Param Zorunlu Tanım
sb-hc-statusCode Evet Sayısal HTTP durum kodu.
sb-hc-statusDescription Evet reddedilme için okunabilir bir sebep.

Sonuçta elde edilen URI, bir WebSocket bağlantısı kurmak için kullanılır.

Doğru şekilde tamamlanırken, webSocket oluşturulmadığından bu el sıkışma kasıtlı olarak 410 HTTP hata koduyla başarısız olur. Bir sorun olursa, aşağıdaki kodlar hatayı açıklar:

Kod Hata Tanım
403 Yasak URL geçerli değil.
500 İç Hata Hizmette bir sorun oluştu.

İstek iletisi

İleti request , hizmet tarafından denetim kanalı üzerinden dinleyiciye gönderilir. Aynı ileti, oluşturulduktan sonra randevu WebSocket üzerinden de gönderilir.

iki request bölümden oluşur: üst bilgi ve ikili gövde çerçeveleri. Gövde yoksa gövde çerçeveleri atlanır. boole body özelliği, istek iletisinde bir gövde olup olmadığını gösterir.

İstek gövdesine sahip bir istek için yapı şu şekilde görünebilir:

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

Dinleyici, birden çok ikili çerçeveye bölünmüş istek gövdesini alma işlemini işlemelidir (bkz . WebSocket parçaları). İstek, FIN bayrağı ayarlanmış bir ikili çerçeve alındığında sona erer.

Gövdesi olmayan bir istek için yalnızca bir metin çerçevesi vardır.

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

için request JSON içeriği aşağıdaki gibidir:

  • address - URI dizesi. Bu istek için kullanılacak randevu adresidir. Gelen istek 64 kB'den büyükse, bu iletinin geri kalanı boş bırakılır ve istemci aşağıda açıklanan işleme eşdeğer accept bir randevu el sıkışması başlatmaLIDIR. Daha sonra hizmet, tamamlanmış web request yuvasını oluşturur. Yanıtın 64 kB'yi aşması beklenebilirse, dinleyici ayrıca bir buluşma el sıkışması başlatmalı ve ardından yanıtı yerleşik Web yuvası üzerinden aktarmalıdır.

  • id – dize. Bu isteğin benzersiz tanımlayıcısı.

  • requestHeaders – Bu nesne, yukarıda açıklandığı gibi yetkilendirme bilgileri dışında gönderen tarafından uç noktaya sağlanan tüm HTTP üst bilgilerini ve ağ geçidiyle bağlantıyla kesinlikle ilişkili üst bilgileri içerir. Özel olarak, RFC7230Via içinde tanımlanan veya ayrılmış TÜM üst bilgiler dışında, kaldırılır ve iletılmaz:

    • Connection (RFC7230, Bölüm 6.1)
    • Content-Length (RFC7230, Bölüm 3.3.2)
    • Host (RFC7230, Bölüm 5.4)
    • TE (RFC7230, Bölüm 4.3)
    • Trailer (RFC7230, Bölüm 4.4)
    • Transfer-Encoding (RFC7230, Bölüm 3.3.1)
    • Upgrade (RFC7230, Bölüm 6.7)
    • Close (RFC7230, Bölüm 8.1)
  • requestTarget – dize. Bu özellik, isteğin "İstek Hedefi"ni (RFC7230, Bölüm 5.3) tutar. TÜM sb-hc- ön ekli parametrelerden kaldırılan sorgu dizesi bölümünü içerir.

  • method - dize. Bu, RFC7231 bölüm 4'e göre isteğin yöntemidir. CONNECT yöntemi KULLANıLMAMALIDIR.

  • body – boole. Bir veya daha fazla ikili gövde çerçevesinin takip edip etmediğini gösterir.

{
    "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
     }
}
İsteklere yanıt verme

Alıcı yanıt vermelidir. Bağlantı korunurken isteklere yanıt vermenin tekrar tekrar başarısız olması dinleyicinin engellenmesine neden olabilir.

Yanıtlar herhangi bir sırayla gönderilebilir, ancak her istek 60 saniye içinde yanıtlanmalıdır, aksi takdirde teslim başarısız olduğu bildirilir. Çerçeve hizmet tarafından alınana response kadar 60 saniyelik son tarih sayılır. Birden çok ikili çerçeve içeren devam eden bir yanıt 60 saniyeden uzun süre boşta olamaz veya sonlandırılır.

İstek denetim kanalı üzerinden alınırsa, yanıtın isteğin alındığı denetim kanalında gönderilmesi veya randevu kanalı üzerinden gönderilmesi GEREKİr.

Yanıt, "response" adlı bir JSON nesnesidir. Gövde içeriğini işleme kuralları, iletide request olduğu gibi ve özelliğine body göre de geçerlidir.

  • requestId – dize. GEREKLİ. Yanıtlanan id iletinin request özellik değeri.
  • statusCode – sayı. GEREKLİ. bildirimin sonucunu gösteren sayısal bir HTTP durum kodu. 502 "Hatalı Ağ Geçidi" ve 504 "Ağ Geçidi Zaman Aşımı" dışında RFC7231 Bölüm 6'nın tüm durum kodlarına izin verilir.
  • statusDescription - dize. ISTEĞE BAĞLI. RFC7230 başına HTTP durum kodu neden tümceciği, Bölüm 3.1.2
  • responseHeaders – Dış HTTP yanıtında ayarlanacak HTTP üst bilgileri. gibi request, RFC7230 tanımlı üst bilgiler DE KULLANILMALIDIR.
  • body – boole. İkili gövde çerçevelerinin izlenip izlenmediğini gösterir.
----- 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" }
----------------------------------
Randevu yoluyla yanıt verme

64 kB'yi aşan yanıtlar için yanıt bir randevu yuvası üzerinden teslim edilmelidir. Ayrıca, istek 64 kB'yi aşarsa ve request yalnızca adres alanını içeriyorsa, almak requestiçin bir randevu yuvası oluşturulmalıdır. Bir randevu yuvası oluşturulduktan sonra, ilgili istemciye yanıtlar ve ilgili istemciden gelen sonraki istekler, devam ederken randevu yuvası üzerinden teslim edilmelidir.

içindeki address URL request , randevu yuvasını oluşturmak için olduğu gibi kullanılmalıdır, ancak aşağıdaki parametreleri içerir:

Parametre Zorunlu Veri Akışı Açıklaması
sb-hc-action Evet Yuva kabul etmek için parametresinin sb-hc-action=request

Bir hata varsa hizmet aşağıdaki gibi yanıtlayabilir:

Kod Hata Açıklama
400 Geçersiz İstek Tanınmayan eylem veya URL geçerli değil.
403 Yasak URL'nin süresi doldu.
500 İç Hata Hizmette bir sorun oluştu

Bağlantı kurulduktan sonra, istemcinin HTTP yuvası kapatıldığında veya şu durumda olduğunda sunucu WebSocket'i kapatır:

WS Durumu Tanım
1001 Gönderen istemci bağlantıyı kapatır.
1001 Karma Bağlan ion yolu silindi veya devre dışı bırakıldı.
1008 Güvenlik belirtecinin süresi doldu, bu nedenle yetkilendirme ilkesi ihlal edildi.
1011 Hizmette bir sorun oluştu.

Dinleyici belirteci yenilemesi

Dinleyici belirtecinin süresi dolmak üzereyken, yerleşik denetim kanalı aracılığıyla hizmete bir metin çerçevesi iletisi göndererek bunu değiştirebilir. İleti, şu anda aşağıdaki özelliği tanımlayan adlı renewTokenbir JSON nesnesi içerir:

  • token: Ad alanı veya Karma Bağlan ion için Dinleme hakkı veren geçerli, URL ile kodlanmış Service Bus Paylaşılan Erişim belirteci.
{
  "renewToken": {
    "token":
      "SharedAccessSignature sr=http%3a%2f%2fcontoso.servicebus.windows.net%2fhyco%2f&sig=XXXXXXXXXX%3d&se=1471633754&skn=SasKeyName"
  }
}

Belirteç doğrulaması başarısız olursa erişim reddedilir ve bulut hizmeti websocket denetim kanalını bir hatayla kapatır. Aksi takdirde yanıt olmaz.

WS Durumu Tanım
1008 Güvenlik belirtecinin süresi doldu, bu nedenle yetkilendirme ilkesi ihlal edildi.

Web Yuvası bağlantı protokolü

Gönderen protokolü, dinleyicinin oluşturulma şekliyle etkili bir şekilde aynıdır. Hedef, uçtan uca WebSocket için maksimum saydamlıktır. Bağlanacak adres dinleyiciyle aynıdır, ancak "eylem" farklıdır ve belirtecin farklı bir izne ihtiyacı vardır:

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

ad alanı-adresi, genellikle biçimindeki {myname}.servicebus.windows.netKarma Bağlan ion'ı barındıran Azure Relay ad alanının tam etki alanı adıdır.

İstek, uygulama tanımlı olanlar da dahil olmak üzere rastgele ek HTTP üst bilgileri içerebilir. Sağlanan tüm üst bilgiler dinleyiciye akar ve kabul denetim iletisinin nesnesinde connectHeader bulunabilir.

Sorgu dizesi parametre seçenekleri aşağıdaki gibidir:

Param Gerekli mi? Tanım
sb-hc-action Evet Gönderen rolü için parametresi olmalıdır sb-hc-action=connect.
{path} Evet (aşağıdaki paragrafa bakın)
sb-hc-token Evet* Dinleyici, Gönderme hakkı veren ad alanı veya Karma Bağlan için geçerli, URL ile kodlanmış bir Service Bus Paylaşılan Erişim Belirteci sağlamalıdır.
sb-hc-id Hayır Uçtan uca tanılama izlemeyi etkinleştiren ve kabul etme el sıkışması sırasında dinleyicinin kullanımına sunulan isteğe bağlı bir kimlik.

{path}, bu dinleyicinin kaydedildiği önceden yapılandırılmış Karma Bağlan ion'un URL ile kodlanmış ad alanı yoludur. İfade path , daha fazla iletişim kurmak için bir sonek ve sorgu dizesi ifadesiyle genişletilebilir. Karma Bağlan ion yolunda hycokayıtlıysa, ifadeyi path burada tanımlanan sorgu dizesi parametreleri takip edebilirhyco/suffix?param=value&.... Ardından tam bir ifade aşağıdaki gibi olabilir:

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

İfade, path "kabul et" denetim iletisindeki adres URI'sindeki dinleyiciye geçirilir.

WebSocket bağlantısı Karma Bağlan ion yolunun kaydedilmemesi, geçersiz veya eksik belirteç veya başka bir hata nedeniyle başarısız olursa, hata geri bildirimi normal HTTP 1.1 durum geri bildirim modeli kullanılarak sağlanır. Durum açıklaması, Azure desteği personeline iletilebilen bir hata izleme kimliği içerir:

Kod Hata Tanım
404 Bulunamadı Karma Bağlan yolu geçersiz veya temel URL yanlış biçimlendirilmiş.
401 Yetkisiz Güvenlik belirteci eksik, hatalı biçimlendirilmiş veya geçersiz.
403 Yasak Güvenlik belirteci bu yol ve bu eylem için geçerli değil.
500 İç Hata Hizmette bir sorun oluştu.

WebSocket bağlantısı başlangıçta ayarlandıktan sonra hizmet tarafından kasıtlı olarak kapatılırsa, bunun nedeni uygun bir WebSocket protokolü hata kodu ve bir izleme kimliği de içeren açıklayıcı bir hata iletisi kullanılarak iletilir.

WS Durumu Tanım
1000 Dinleyici yuvayı kapatıyor.
1001 Karma Bağlan ion yolu silindi veya devre dışı bırakıldı.
1008 Güvenlik belirtecinin süresi dolduğundan yetkilendirme ilkesi ihlal edilir.
1011 Hizmette bir sorun oluştu.

HTTP istek protokolü

HTTP isteği protokolü, protokol yükseltmeleri dışında rastgele HTTP isteklerine izin verir. HTTP istekleri, karma bağlantılar WebSocket istemcileri için kullanılan $hc düzeltmesi olmadan varlığın normal çalışma zamanı adresine işaret edilir.

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

ad alanı-adresi, genellikle biçimindeki {myname}.servicebus.windows.netKarma Bağlan ion'ı barındıran Azure Relay ad alanının tam etki alanı adıdır.

İstek, uygulama tanımlı olanlar da dahil olmak üzere rastgele ek HTTP üst bilgileri içerebilir. Dinleyiciye doğrudan RFC7230 (bkz. İstek iletisi) akışında tanımlananlar dışında sağlanan tüm üst bilgiler istek iletisinin nesnesinde requestHeader bulunabilir.

Sorgu dizesi parametre seçenekleri aşağıdaki gibidir:

Param Gerekli mi? Tanım
sb-hc-token Evet* Dinleyici, Gönderme hakkı veren ad alanı veya Karma Bağlan için geçerli, URL ile kodlanmış bir Service Bus Paylaşılan Erişim Belirteci sağlamalıdır.

Belirteç, veya Authorization HTTP üst bilgisinde ServiceBusAuthorization de taşınabilir. Karma Bağlan ion anonim isteklere izin vermek üzere yapılandırılmışsa belirteç atlanabilir.

Hizmet, gerçek bir HTTP proxy'si olarak olmasa bile etkili bir şekilde ara sunucu işlevi görse de, bölüm Via 5.7.1 RFC7230 uyumlu mevcut Via üst bilgiyi ekler veya ek açıklama ekler. Hizmet, Relay ad alanı ana bilgisayar adını öğesine Viaekler.

Kod Mesaj Tanım
200 Tamam İstek en az bir dinleyici tarafından işlendi.
202 Kabul edildi İstek en az bir dinleyici tarafından kabul edildi.

Bir hata varsa, hizmet aşağıdaki gibi yanıtlayabilir. Yanıtın hizmetten mi yoksa dinleyiciden mi kaynaklandığı, üst bilginin varlığı Via aracılığıyla tanımlanabilir. Üst bilgi varsa, yanıt dinleyicidendir.

Kod Hata Tanım
404 Bulunamadı Karma Bağlan yolu geçersiz veya temel URL yanlış biçimlendirilmiş.
401 Yetkisiz Güvenlik belirteci eksik, hatalı biçimlendirilmiş veya geçersiz.
403 Yasak Güvenlik belirteci bu yol ve bu eylem için geçerli değil.
500 İç Hata Hizmette bir sorun oluştu.
503 Hatalı Ağ Geçidi İstek herhangi bir dinleyiciye yönlendirilemedi.
504 Ağ Geçidi Zaman Aşımı İstek bir dinleyiciye yönlendirildi, ancak dinleyici gerekli zamanda alındı bildiriminde bulunmadı.

Sonraki adımlar