Interacțiunea cu serviciile prin core, microsoft docs

În acest articol

ASP.NET Core este un nou mediu open-source de platforme pentru crearea de aplicații moderne bazate pe cloud bazate pe Internet, cum ar fi aplicații web, aplicații web pentru lucruri și părți de servere ale aplicațiilor mobile.







Pentru o introducere în ASP.NET Core în Service Fabric și instrucțiuni pentru configurarea mediului de dezvoltare, consultați Crearea unei interfețe externe de servicii web pentru o aplicație care utilizează ASP.NET Core.

ASP.NET Core în mediul de servicii Fabric

Deși puteți rula aplicații ASP.NET Core pe .NET Core sau versiunea completă a .NET Framework, serviciile Fabric Service în prezent pot rula numai pe întregul .NET Framework. Acest lucru înseamnă că atunci când creați serviciul ASP.NET Core Service Fabric, trebuie să vizați în continuare întregul .NET Framework.

ASP.NET Core poate fi folosit în două moduri diferite în Service Fabric:

  • Plasați-l sub forma unui fișier executabil invitat. Acest lucru este folosit în principal pentru a rula aplicațiile existente ASP.NET Core în Service Fabric fără a schimba codul.
  • Efectuați în interiorul unui serviciu fiabil. Acest lucru oferă o integrare mai eficientă cu timpul de execuție Service Fabric și vă permite să utilizați ASP.NET Core cu urmărirea de stat.

Restul acestui articol explică modul de utilizare a nucleului ASP.NET într-un serviciu de încredere, utilizând componentele de integrare ASP.NET livrate împreună cu Service Fabric SDK.

Plasarea de materiale pentru servicii

În serviciul Fabric, una sau mai multe instanțe și / sau replici ale unui serviciu sunt efectuate în procesul gazdei de serviciu, un executabil care execută codul de serviciu. Creatorul de servicii aparține serviciului de găzduire a serviciului, pe care Service Fabric îl activează și monitorizează.

De obicei, ASP.NET (înainte de MVC 5) este strâns asociat cu IIS prin intermediul System.Web.dll. ASP.NET Core împarte un server web și o aplicație web. Acest lucru vă permite să migrați o aplicație Web între diferite servere Web și, de asemenea, permite găzduirea autonomă a serverelor web. Acest lucru înseamnă că serverul web poate fi rulat în propriul proces, spre deosebire de procesul care aparține software-ului server dedicat web, cum ar fi IIS.

Pentru a combina serviciul Fabric și ASP.NET în serviciul de încredere sau ca o aplicație executabilă pentru oaspeți, trebuie să porniți ASP.NET în procesul de găzduire a serviciului. Standalone ASP.NET Core vă permite să faceți acest lucru.

ASP.NET Core în servicii fiabile

În mod obișnuit, aplicațiile ASP.NET Core independente creează WebHost la punctul de intrare al aplicației, de exemplu, metoda void static Main () în Program.cs. În acest caz, ciclul de viață al WebHost este legat de ciclul de viață al procesului.

Punctul de intrare al aplicației nu este potrivit pentru crearea WebHost în serviciul de încredere, deoarece este utilizat numai pentru înregistrarea tipului de serviciu în timpul de execuție a serviciului de încredere, pentru a putea instanța acest tip de serviciu. WebHost trebuie să fie creat automat în Service fiabil. În procesul de găzduire a serviciului, instanțele serviciului și / sau replicile pot avea mai multe cicluri de viață.

O instanță de serviciu fiabil este reprezentată utilizând o clasă de servicii derivată de la StatelessService sau StatefulService. Stack-ul de comunicare pentru serviciu este conținut în implementarea serviciului de clasă ICommunicationListener. NuGet Microsoft.ServiceFabric.Services.AspNetCore. * Pachetele conțin implementări ICommunicationListener. care rulează și administrează ASP.NET Core WebHost pentru Kestrel sau WebListener în Service fiabil.

Interacțiunea cu serviciile prin core, microsoft docs

Obiectele ICommunicationListener din ASP.NET Core

Implementări ICommunicationListener Kestrel și WebListener în pachete NuGet Microsoft.ServiceFabric.Services.AspNetCore * Au modele de utilizare similare, dar efectuează mai multe acțiuni diferite pentru fiecare server web.

Ambii ascultători de legătură oferă un constructor care acceptă următoarele argumente:

Intermediar middleware pentru integrarea Service Fabric

Motiv pentru identificarea eronată

Acest lucru poate provoca periodic erori greu de diagnosticat.

Pentru a evita acest lucru, serviciile pot plasa un punct final în serviciul de nume cu un identificator unic și apoi să îl verifice în timpul procesării cererilor clientului. Aceasta este o acțiune comună între serviciile într-un mediu de încredere al unui client prietenos. Acest lucru nu oferă autentificarea securizată a serviciului într-un mediu client neprietenos.

Serviciile care utilizează un port atribuit dinamic trebuie să utilizeze acest middleware.







Serviciile care folosesc un port unic persistent nu au o astfel de problemă într-un mediu comun. Un port unic persistent este de obicei utilizat pentru servicii externe care au nevoie de un port cunoscut pentru conectarea aplicațiilor client. De exemplu, majoritatea aplicațiilor web cu acces la Internet utilizează portul 80 sau 443 pentru conexiunile browserului web. În acest caz, nu includeți un identificator unic.

Diagrama de mai jos arată fluxul de solicitare cu software-ul middleware activat.

Interacțiunea cu serviciile prin core, microsoft docs

WebListener în servicii fiabile

WebListener poate fi folosit în Service fiabil prin importul pachetului NuGet Microsoft.ServiceFabric.AspNetCore.WebListener. Acest pachet conține un WebListenerCommunicationListener. implementarea ICommunicationListener. care vă permite să creați WebHost ASP.NET Core în cadrul serviciului de încredere utilizând WebListener ca server web.

Următoarea diagramă arată modul în care WebListener utilizează driverul kernel-ului http.sys în Windows pentru a partaja porturile:

Interacțiunea cu serviciile prin core, microsoft docs

WebListener într-un serviciu fără urmărirea de stat

Pentru a utiliza WebListener într-un serviciu care nu monitorizează starea, suprascrie metoda CreateServiceInstanceListeners și returnează instanța WebListenerCommunicationListener:

WebListener în serviciul de urmărire a stării

Configurația punctului final

De asemenea, trebuie să treci numele punctului final la constructorul WebListenerCommunicationListener.

Folosind un WebListener cu un port static

Pentru a utiliza un port static cu un WebListener, specificați numărul portului în configurația Endpoint.

Folosind un WebListener cu un port dinamic

Pentru a utiliza un port alocat dinamic cu un WebListener, omiteți proprietatea Port în configurația Endpoint.

Kestrel în servicii fiabile

Kestrel poate fi folosit în Service fiabil prin importul pachetului NuGet Microsoft.ServiceFabric.AspNetCore.Kestrel. Acest pachet conține KestrelCommunicationListener. implementarea ICommunicationListener. care vă permite să creați WebHost ASP.NET Core într-un serviciu fiabil folosind Kestrel ca server web.

Kestrel este un server Web cross-platform pentru ASP.NET Core bazat pe libuv, o bibliotecă inter-platformă de operații I / O asincrone. Spre deosebire de WebListener, Kestrel nu utilizează un manager centralizat de puncte finale, cum ar fi http.sys. și nu acceptă partajarea porturilor între mai multe procese. Fiecare instanță Kestrel trebuie să utilizeze un port unic.

Interacțiunea cu serviciile prin core, microsoft docs

Kestrel în serviciu fără urmărirea de stat

Pentru a utiliza Kestrel într-un serviciu fără urmărirea de stat, înlocuiți metoda CreateServiceInstanceListeners și returnați o instanță a KestrelCommunicationListener:

Kestrel în serviciul de urmărire de stat

Pentru a utiliza Kestrel într-un serviciu cu urmărirea de stat, înlocuiți metoda CreateServiceReplicaListeners și returnați o instanță a KestrelCommunicationListener:

În acest exemplu, un exemplu de un element al IReliableStateManager este furnizat containerului de integrare a dependenței WebHost. Acest lucru este opțional, dar vă permite să utilizați IReliableStateManager și colecții de încredere în metodele de acțiune ale controlerului MVC.

Rețineți că numele de configurare a punctului final nu este furnizat de KestrelCommunicationListener în serviciul de urmărire statal. Acest lucru este explicat în detaliu în secțiunea următoare.

Configurația punctului final

Pentru a utiliza Kestrel, configurația Endpoint nu este necesară.

Folosind Kestrel și un port static

Puteți configura un port static în configurația Endpoint a fișierului ServiceManifest.xml pentru utilizare cu Kestrel. Deși acest lucru nu este obligatoriu, acest lucru oferă două avantaje potențiale:

Dacă se configurează Endpoint, numele său trebuie transmis constructorului KestrelCommunicationListener.

Dacă configurația Endpoint nu este utilizată, nu specificați numele punctului final în constructorul KestrelCommunicationListener. În acest caz, va fi utilizat portul dinamic. Acest proces este descris în secțiunea următoare.

Folosind Kestrel și portul dinamic

Kestrel nu poate utiliza asignarea portului automat din configurația Endpoint din fișierul ServiceManifest.xml, deoarece atribuirea portului automat din configurația Endpoint atribuie un port unic fiecărui proces gazdă. Ca rezultat, un proces gazdă poate conține mai multe cazuri de Kestrel. Deoarece Kestrel nu acceptă partajarea porturilor, acest lucru nu va funcționa, deoarece fiecare instanță de Kestrel ar trebui să fie deschisă într-un port unic.

Pentru a utiliza atribuirea dinamică a portului în Kestrel, omiteți complet configurația Endpoint în fișierul ServiceManifest.xml și nu treceți numele punctului final către constructorul KestrelCommunicationListener.

În această configurație, KestrelCommunicationListener va selecta automat un port neutilizat din gama de porturi de aplicație.

Scenarii și configurații

  • Un serviciu ASP.NET Core accesibil extern, fără urmărire de stat
  • Serviciul de bază ASP.NET fără urmărirea de stat numai pentru uz intern
  • Serviciul ASP.NET Core cu urmărire de stat numai pentru uz intern

Un serviciu accesibil extern oferă un punct final care este accesibil în afara clusterului, de obicei printr-un balancer de sarcină.

Un serviciu numai pentru uz intern este un serviciu al cărui punct final este disponibil numai în cadrul clusterului.

Serviciul nu Endpoints stateful ar trebui să fie puse la dispoziție pe Internet. Clusterele care se afla in spatele unui echilibrist de sarcină care nu acceptă rezoluția Service Servicii Fabric (de exemplu, Azure egalizatorul de încărcare), nu va fi în măsură să furnizeze servicii cu statefull deoarece balancer de sarcină nu ar fi capabil de a detecta și de trafic direct la corespunzătoare Stateful de serviciu replica.

Disponibil din afara serviciului ASP.NET Core fără urmărirea de stat

În prezent, Kestrel nu este acceptat ca server de front-end (cu acces la Internet). Pentru a procesa traficul de pe Internetul public, trebuie să utilizați un server proxy invers, de exemplu, IIS sau Nginx.







Trimiteți-le prietenilor: