Service Fabric Varias instancias de servicio con anulación de configuración
Nuestra aplicación de estructura de servicio incluye un servicio sin estado que expone un punto final HTTP a través deOwinCommunicationListener
.
ServiceManifest.Xml para este servicio especifica el punto final del servicio<Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />
Se puede acceder al servicio sin estado a través de un navegador enhttp: // localhost: 8090 /
Lo que estamos tratando de hacer es crear instancias múltiples de este servicio en diferentes puntos finales en la misma aplicación de Service Fabric a través del ApplicationManifest.
losServiceManifestImport
importa nuestro paquete de servicio y permite anulaciones de configuración a nivel de aplicación. No podemos anular el ServiceEndpoint de esta manera, solo los valores en 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>
Podemos crear instancias con nombre del servicio especificando múltiplesService
nodos debajoDefaultServices
<DefaultServices>
<Service Name="FooInstanceA">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="FooInstanceB">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
¿Es posible especificar anulaciones de configuración por instancia de un servicio a través de la configuración?
Traté de hacer que las instancias de servicio escuchen en un puerto específico usando su nombre de servicio para determinar qué puerto para que FooInstanceA escuche en el puerto 8090 y FooInstanceB escuche en 8091.
Claramente, Service Fabric está haciendo algo de magia durante la implementación porque cuando FooInstanceB escucha en un puerto que no sea el especificado en la configuración de ServiceEndpoint, el servicio no es accesible.
La primera razón es que la DACL no está establecida en el punto final, esto se resuelve ejecutando;
netsh http add urlacl http://+:8091/ user=everyone listen=yes
,Esto permite que los servicios aparezcan y se muestren en buen estado en el Service Fabric Explorer, sin embargo, FooInstanceB responde con un error HTTP 503 cuando accedemos conhttp: // localhost: 8091 /
¿Cómo podemos hacer que las instancias de servicio escuchen en diferentes puertos?
Espero que esté claro, gracias.