Service Fabric Mehrere Dienstinstanzen mit Konfigurationsüberschreibung
Unsere Service Fabric-Anwendung enthält einen zustandslosen Service, der einen HTTP-Endpunkt über @ verfügbar machOwinCommunicationListener
.
Die Datei "ServiceManifest.Xml" für diesen Dienst gibt den Dienstendpunkt an.<Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />
uf den zustandslosen Dienst kann dann über einen Browser unter @ zugegriffen werdehttp: // localhost: 8090 /
Wir versuchen, mehrere Instanzen dieses Dienstes auf verschiedenen Endpunkten in derselben Service Fabric-Anwendung über das ApplicationManifest zu instanziieren.
DasServiceManifestImport
importiert unser Servicepaket und ermöglicht Konfigurationsüberschreibungen auf Anwendungsebene. Auf diese Weise können wir den ServiceEndpoint nicht überschreiben, sondern nur die Werte in Settings.xml
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="FooServicePkg" ServiceManifestVersion="1.0.0" >
<ConfigOverrides Name="Config">
<Settings>
<SectionName Name="MySettings">
<Parameter Name="MySetting" Value="SomeValue">
</Settings>
</ConfigOverrides>
</ServiceManifestImport>
Wir können benannte Instanzen des Service erstellen, indem wir mehrere @ angebeService
Knoten unterDefaultServices
<DefaultServices>
<Service Name="FooInstanceA">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="FooInstanceB">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
Ist es möglich, Konfigurationsüberschreibungen pro Instanz eines Dienstes durch Konfiguration anzugeben?
Ich habe versucht, die Dienstinstanzen dazu zu bringen, einen bestimmten Port abzuhören, indem sie anhand ihres Dienstnamens herausgefunden haben, welcher Port von FooInstanceA auf Port 8090 und von FooInstanceB auf 8091 abgehört wird.
Clearly Service Fabric führt während der Bereitstellung einige magische Aktionen aus, da der Dienst nicht verfügbar ist, wenn FooInstanceB einen anderen als den in der ServiceEndpoint-Konfiguration angegebenen Port überwacht.
Der erste Grund ist, dass die DACL nicht auf dem Endpunkt festgelegt ist. Dies wird durch Ausführen behoben.
netsh http add urlacl http://+:8091/ user=everyone listen=yes
,Auf diese Weise können die Dienste im Service Fabric Explorer angezeigt werden. Die FooInstanceB antwortet jedoch mit einem HTTP 503-Fehler, wenn wir auf sie mit @ zugreifehttp: // localhost: 8091 /
Wie können wir erreichen, dass die Service-Instanzen an verschiedenen Ports empfangsbereit sind?
Ich hoffe das ist klar, danke.