0

Ich habe einen Service Fabric-Cluster in Azure eingerichtet und habe eine Anwendung mit zwei ausgeführten Diensten. Jetzt möchte ich in der Lage sein, mit den Diensten in meinem Browser eine Verbindung herzustellen, wie ich es kann, wenn ich es auf localhost ausführe. Die Anwendung verwendet Owin und Swagger. So sieht es aus, als würde es auf localhost laufen: running on localhost. Wenn ich versuche, eine Verbindung von Azure aus herzustellen, erhalte ich einen Timeout-Fehler. Ich verwende Port 20002 und 20001 in der Anwendung, und ich habe die Ports geöffnet, als ich den Cluster eingerichtet habe (Port 19000, 19080, 20001 und 20002 sind in meinem Cluster geöffnet). Hier ist mein Service im Explorer: Service in the explorer. Der Cluster wird mit Zertifikatsicherheit eingerichtet, und ich habe das Zertifikat meinem Browser hinzugefügt (ich verwende es, um eine Verbindung zum Explorer herzustellen). Mein Code für CreateServiceInstanceListeners:Verbinden mit Service Fabric-Anwendungsendpunkt

 protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() 
    { 
     return Context.CodePackageActivationContext.GetEndpoints() 
      .Where(endpoint => endpoint.Protocol.Equals(EndpointProtocol.Http) || endpoint.Protocol.Equals(EndpointProtocol.Https)) 
      .Select(endpoint => new ServiceInstanceListener(serviceContext => new OwinCommunicationListener("", new Startup(), serviceContext))); 
    } 

und mein Code für openAsync:

 public OwinCommunicationListener(string appRoot, IOwinAppBuilder startup, StatelessServiceContext serviceInitializationParameters) 
    { 
     _startup = startup; 
     _appRoot = appRoot; 
     _parameters = serviceInitializationParameters; 
    } 


    public Task<string> OpenAsync(CancellationToken cancellationToken) 
    { 
     var serviceEndpoint = 
      _parameters 
      .CodePackageActivationContext 
      .GetEndpoint("ServiceEndpoint"); 

     var port = serviceEndpoint.Port; 
     var root = 
      String.IsNullOrWhiteSpace(_appRoot) 
      ? String.Empty 
      : _appRoot.TrimEnd('/') + '/'; 


     //TODO: Make localhost configable 
     _listeningAddress = String.Format(
      CultureInfo.InvariantCulture, 
      "http://+:{0}/{1}", 
      port, 
      root 
     ); 
     _serverHandle = WebApp.Start(
      _listeningAddress, 
      appBuilder => _startup.Configuration(appBuilder) 
     ); 

     var publishAddress = _listeningAddress.Replace(
      "+", 
      FabricRuntime.GetNodeContext().IPAddressOrFQDN 
     ); 

     ServiceEventSource.Current.Message("Listening on {0}", publishAddress); 
     return Task.FromResult(publishAddress); 
    } 

und meine ServiceEndpoint:

<Endpoints> 
    <Endpoint Name="ServiceEndpoint" Port="20002" /> 
</Endpoints> 

meine Frage zusammenzufassen: Wie kann ich meine Service-Fabric-Anwendungen acces Dienste in meinem Browser, mit Swagger und alle?

+0

nach vorne einem (any) externer Anschluss an internem Hafen 20002 auf Ihrem Lastenausgleich – Mardoxx

Antwort

1

Der beste Weg besteht darin, den Reverse-Proxy auf Port 19081 zu verwenden. Sie müssen ihn beim Erstellen des Clusters aktivieren.

Anschließend müssen Sie die Load-Balancer-Regel für Reverse-Proxy einrichten. Der grundlegende Aufbau eines Service-Stoff auf Azure zum Lastenausgleich muss nicht Regel für TCP-Port 19081 jedoch können Sie die Regel von 19000.

Danach zum Beispiel kopieren:

  • Ihr Anwendungsname ist SampleApp
  • Ihr Service-Name ist SampleService in Port gehostet 20002
  • Sie normalerweise Ihren Dienst bei http://localhost:20002/api/values
  • Die öffentliche IP-f lokal erreichen oder Ihr Cluster 51.140.xx.xx

Dann können Sie jetzt Ihren Dienst bei erreichen http://51.140.xx.xx:19081/SampleApp/SampleService/api/values (nehme an, Sie sichern Ihren Reverse-Proxy-Endpunkt nicht)

Verwandte Themen