2017-04-05 2 views
1

Ich erforsche die Service Fabric Microservices Funktionalität von Azure und mag es sehr. Ich habe dort einige einfache WCF-Dienste gehostet und kann diese Dienste von .NET Framework-Clients mit der Klasse WcfClientCommunicationFactory aufrufen. Alles funktioniert gut.Call Service Fabric von .net Kern

Jetzt möchte ich meine Microservices von einer .NET Core-Konsole app aufrufen. Die Suchergebnisse für diese Keywords sind darauf ausgerichtet, .NET Core für die Implementierung des eigentlichen Service zu verwenden, aber ich möchte .NET Core für den Client verwenden.

Können .NET Core-Anwendungen bereits mit Service Fabric Microservices kommunizieren? Wenn ja, was ist das .NET Core-Äquivalent von WcfClientCommunicationFactory?

+0

Might diese https://blogs.msdn.microsoft.com/webdev/2016/06/26/wcf-connected-service-for-net-core-1- 0-0-und-asp-net-core-1-0-0-ist-jetzt-verfügbar/Hilfe? Der einfachste Weg ist die Verwendung zustandsloser Apis, die die Dienste von wcf im Cluster aufrufen. Client kann dann mit Ruhe verbinden. –

Antwort

1

Der richtige Name für die Fabrik ist WcfCommunicationClientFactory, die in Microsoft.ServiceFabric.Services.Communication.Wcf.Client Namensraum von Microsoft.ServiceFabric.Services.Wcf NuGet package befindet. Aber es ist nicht kompatibel mit .Net Core für jetzt, als Ganzes WCF Ansatz und Service Fabric sind nicht.

Service-Stoff Microservice ist ein REST-Dienste am Ende, so haben Sie drei Methoden, um es zu bewirten (from MSDN):

  • Kein spezifisches Protokoll: Wenn Sie nicht über einen bestimmten Wahl des Kommunikationsframeworks, aber Sie möchten schnell etwas auf den Weg bringen, dann ist die ideale Option für Sie der Service remoting, der stark typisierte Remoteprozeduraufrufe für zuverlässige Dienste und zuverlässige Akteure ermöglicht. Dies ist der einfachste und schnellste Weg, um mit der Servicekommunikation zu beginnen. Dienst-Remoting behandelt die Auflösung von Dienstadressen, die Verbindung, die Wiederholung und die Fehlerbehandlung. Dies ist sowohl für C# - als auch für Java-Anwendungen verfügbar.
  • HTTP: Für die sprachunabhängige Kommunikation bietet HTTP eine Industriestandardauswahl mit Tools und HTTP-Servern, die in vielen verschiedenen Sprachen verfügbar sind und von Service Fabric unterstützt werden. Dienste können jeden verfügbaren HTTP-Stapel verwenden, einschließlich ASP.NET Web API für C# -Anwendungen. In C# geschriebene Clients können die Klassen ICommunicationClient und ServicePartitionClient nutzen, während Sie für Java die Klassen CommunicationClient und FabricServicePartitionClient für service resolution, HTTP connections, and retry loops verwenden.
  • WCF: Wenn Sie über vorhandenen Code verfügen, der WCF als Kommunikationsframework verwendet, können Sie den WcfCommunicationListener für die Serverseite und WcfCommunicationClient und ServicePartitionClient für den Client verwenden. Dies ist jedoch nur für C# -Anwendungen in Windows-basierten Clustern verfügbar. Weitere Informationen finden Sie in diesem Artikel unter WCF-based implementation of the communication stack.

Hinweis: Sie benötigen ASP.NET Core tools for Visual Studio 2017. Die .NET Core-Tools für Visual Studio 2015 werden nicht mehr aktualisiert.

Hinweis # 2: Während ASP.NET Core-Anwendungen auf .NET Core oder dem vollständigen .NET Framework ausgeführt werden können, können Service Fabric-Dienste derzeit nur auf dem vollständigen .NET Framework ausgeführt werden. Das bedeutet, wenn Sie einen ASP.NET Core Service Fabric-Dienst erstellen, müssen Sie weiterhin auf das vollständige .NET Framework ausrichten. Daher ist keines von NuGet packages from Service Fabric auf das vollständige .NET Framework ausgerichtet.

ASP.NET Core-App kann als Gast ausführbare Datei auf Service-Fabric ohne Änderungen am Code gehostet werden, aber der empfohlene Weg, dies zu tun ist, um Hosting-ASP.NET Core in a Reliable Service mit Kestrel (NuGet package) oder WebListener (NuGet package):

enter image description here

Nach Web Frontend, Angular SPA, Xamarin oder einfach C#HttpClient, so Client vollständige .NET Framework nicht gezielt werden muss, aber Server ist - Sie Ihren Server in Service Fabric veröffentlichen, können Sie es mit HTTP Protokoll von überall verbinden.

Einige Beispielcode:

static HttpClient client = new HttpClient(); 

client.BaseAddress = new Uri(MICRO_SERVICE_URI); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = await client.GetAsync(path); 
if (response.IsSuccessStatusCode) 
{ 
    // deserialize the result from JSON 
    var result = await response.Content.ReadAsAsync<DtoClass>(); 
}