2017-10-11 1 views
2

Ich habe einen zustandslosen ASP.net Core 2.0-Dienst und einen zustandsabhängigen Asp.net Core 2.0-Dienst auf Service Fabric 6 mit 10 Partitionsanzahl.Client versucht, eine Verbindung mit ungültiger Adresse auf Service Fabric herzustellen. ServiceProxy

folgte ich dieses Tutorial

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-add-a-web-frontend

ich alle Schritte befolgt, außer dass ich die Vorlagen in Visual Studio verwendet, wo CreateServiceReplicaListeners unter Verwendung KestrelCommunicationListener

protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() 
    { 
     return new ServiceReplicaListener[] 
     { 
      new ServiceReplicaListener(serviceContext => 
       new KestrelCommunicationListener(serviceContext, (url, listener) => 
       { 
        return new WebHostBuilder() 
           .UseKestrel() 
           .ConfigureServices(
            services => services 
             .AddSingleton<StatefulServiceContext>(serviceContext) 
             .AddSingleton<IReliableStateManager>(this.StateManager)) 
           .UseContentRoot(Directory.GetCurrentDirectory()) 
           .UseStartup<Startup>() 
           .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl) 
           .UseUrls(url) 
           .Build(); 
       })) 
     }; 
    } 

Als ich meinen Dienst rufen in der Asp.net Core 2.0 Staatenlosen Service mit diesem Code:

var service = ServiceProxy.Create<IStorageService>(new Uri("fabric:/MyCluster/Storage"), new ServicePartitionKey(Fnv1aHashCode.Get64bitHashCode(User.Id))); 
await service.MyMethod(); 

eine Ausnahme ausgelöst wird, wenn "MyMethod"

Client-Aufruf versucht, ungültige Adresse http://localhost:58352/etc ..

Die URL in der Ausnahme ist im Service Fabric Explorer vorhanden zu verbinden, und die Port und PartitionKey ist korrekt. Im ServiceManifest sind keine Endpunkte festgelegt, da der Stateful-Dienst im Grunde nur die Vorlage mit der IService-Schnittstelle und der MyMethod-Methode gemäß obigem Lernprogramm ist.

Was fehlt mir hier? Die Dokumentation ist nicht aktuell für Asp.net Core 2.0.

Ich habe versucht, keine Partitionen zu verwenden, Einstellung ServicePartitionKey(0) aber dasselbe Ergebnis.

Ich weiß nicht weiter.

Antwort

4

Sie sind zwei völlig unterschiedliche Kommunikations-Stacks Mischen:

Sie können die zwei nicht mischen. Sie müssen einen HTTP-Client verwenden, um mit den HTTP-Endpunkten Ihres Dienstes zu kommunizieren. Es gibt ein HTTP reverse proxy in Service Fabric, das die Service-Erkennung und die Weiterleitung von Anforderungen für Sie vereinfacht. Es gibt auch eine DNS service, mit der Sie andere Dienste mit einfachen DNS-Namen adressieren können.

Im Tutorial, der Back-End-Dienst verwendet einen Service-Remoting-Hörer verweisen, die einen RPC-Endpunkt für ServiceProxy aussetzt zu verbinden:

protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() 
{ 
    return new List<ServiceReplicaListener>() 
    { 
     new ServiceReplicaListener(
      (context) => 
       this.CreateServiceRemotingListener(context)) 
    }; 
} 
+0

Dank, verwirrte ich die beiden Stapel. Können Sie Code oder Dokumente freigeben, um den Endpunkt, der mit dem von KestrelCommunicationListener bereitgestellten HTTP-Endpunkt verfügbar gemacht wurde, aufzurufen? –

Verwandte Themen