OwinCommunicationListener
公开 HTTP 端点。
此服务的 ServiceManifest.Xml 指定了服务端点 <Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8090" />
然后可以通过浏览器访问无状态服务在 http://localhost:8090/
我们要做的是通过 ApplicationManifest 在同一服务织物应用程序上实例化此服务的多个实例到不同的端点。
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>
我们可以通过在DefaultServices
下指定多个Service
节点来创建服务的命名实例。
<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错误。
我们如何使服务实例侦听不同的端口?
希望这很清楚,谢谢。