我们的服务结构应用程序包括一个无状态服务,该服务通过OwinCommunicationListener
.
此服务的 ServiceManifest.Xml 指定服务端点<Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />
然后可以通过http://localhost:8090/上的浏览器访问无状态服务
我们正在尝试做的是通过 ApplicationManifest 在同一个 Service Fabric 应用程序的不同端点上实例化此服务的多个实例。
导入我们的ServiceManifestImport
服务包并允许在应用程序级别进行配置覆盖。我们无法以这种方式覆盖 ServiceEndpoint,只能覆盖 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>
我们可以通过在下面指定多个Service
节点来创建服务的命名实例DefaultServices
<DefaultServices>
<Service Name="FooInstanceA">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="FooInstanceB">
<StatelessService ServiceTypeName="FooType" InstanceCount="1" />
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
是否可以通过配置为每个服务实例指定配置覆盖?
我试图让服务实例在特定端口上侦听,方法是使用它们的服务名称来确定哪个端口,以便 FooInstanceA 在端口 8090 上侦听,而 FooInstanceB 在 8091 上侦听。
显然,Service Fabric 在部署期间发挥了作用,因为当 FooInstanceB 侦听的端口不是 ServiceEndpoint 配置中指定的端口时,该服务无法访问。
第一个原因是端点上没有设置DACL,通过运行解决;
netsh http add urlacl http://+:8091/ user=everyone listen=yes
这允许服务出现并在 Service Fabric Explorer 中显示健康,但是当我们使用http://localhost:8091/访问时,FooInstanceB 会响应 HTTP 503 错误
我们如何让服务实例监听不同的端口?
我希望这很清楚,谢谢。