2016-04-13 16 views
0

Ich habe Azure Service Fabric Reliable Services recherchiert und auch die Beispiele betrachtet.Zugriff auf einen zustandsbehafteten Service

Ich baue jetzt eine einfache Proof-of-Concept-Anwendung mit einem empfohlenen Setup: Ein zustandsloser Web-API-Dienst mit einem Stateful-Service (1 Partition).

Ich bin im Kreis herumgegangen und habe versucht, den einfachsten Weg zu finden, mit dem der API-Dienst mit dem Stateful Service dahinter sprechen kann. Offenbar muss der statusbehaftete Dienst auch mithilfe der Web-API verfügbar gemacht werden (wie in der WordCount-Beispielanwendung gezeigt).

Bin ich richtig zu denken, dass, um einen Stateful-Service zu konsumieren muss es sich über HTTP/WCF etc. mit etwas wie OwinCommunicationListener : ICommunicationListener aus den Beispielen freisetzen?

Antwort

2

Wenn sich der Stateful- und Stateless-Dienst im selben Cluster befinden (In Ihrem Fall nehme ich an, dass beide Dienste denselben Anwendungstyp haben (gleiche Lösung)), können Sie den Stateful-Dienst vom zustandslosen Dienst aus aufrufen.

Wenn Sie den zustandsbehafteten Dienst außerhalb des Clusters verwenden möchten, müssen Sie einen API-Kommunikationslistener öffnen.

ServiceProxy Klasse ist von "Microsoft.ServiceFabric.Services" verfügbar.

Der Dienstproxy funktioniert nur innerhalb desselben Clusters.

Nutzung

IServiceClass proxy = ServiceProxy.Create<IServiceClass >(new Uri(fabric:/your_service)); 

Um Arbeiten an der Proxy, muss die Methoden in dem Stateful-Dienst eine Schnittstelle zu belichten verwenden.

+0

ich damit jetzt experimentieren bin, fand ich dies in der WebReferenceApp in den Beispielen. – mayu

0

Wenn die Dienste innerhalb der gleichen App lebt, können Sie den Service-Instanz so etwas wie Zugang:

public static MyServices.Interfaces.IMyStatefulService GetMyStatefulService() 
    { 
     var proxyLocation = new ServiceUriBuilder("MyStatefulService"); 
     var partition = new ServicePartitionKey(1); //provide the partitionKey for stateful services. for stateless services, you can just comment this out 
     return ServiceProxy.Create<MyServices.Interfaces.IMyStatefulService>(proxyLocation.ToUri(), partition); 
    } 

ServiceProxy vom Microsoft.ServiceFabric.Services.Remoting.Client Namespace ist.

Und Sie werden Interface-Code in etwa so aussehen:

public interface IMyStatefulService : IService 
{ 
    Task<MyResponseResult> DoSomething(MyRequest request); 
}  
Verwandte Themen