【发布时间】:2017-07-07 15:31:51
【问题描述】:
我已经按照此处的指南设置了一个包含两个服务的应用程序,一个是标准的 aspnet core api,另一个是 node express 应用程序:
https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-deploy-existing-app
当我在本地部署应用程序时,我可以使用命名服务来访问 AspNetCore 应用程序,例如:
http://localhost:19081/sf_node_test_02/AspNetCore/api/values
同样,我希望能够使用此地址访问我的来宾可执行文件的 api:
http://localhost:19081/sf_node_test_02/NodeApp
但是,这不起作用。
如果我使用服务的直接网址,例如:
http://localhost:30032/ 我可以看到 node js 应用程序实际上正在按预期工作。
现在,我知道在运行 AspNet 核心应用程序时,它会明确地将其侦听地址发送回命名服务,但来宾可执行文件并不能解释为什么它们的行为可能不同。此外,据我了解,当前版本的服务结构没有为来宾可执行文件提供有关动态分配端口的信息,因此必须在服务端点和应用程序中硬编码以侦听同一端口。
例如如果我有:
<Endpoint Name="NodeAppTypeEndpoint" Port="30032" Protocol="http" Type="Input" UriScheme="http"/>
那么在nodejs应用中我也必须有:
const port = process.env.PORT || 30032;
app.listen(port, () => {
console.log(`Listening on port: ${port}`);
});
在两个地方都注意到 30032。
来自文档:
此外,您可以要求 Service Fabric 将此端点发布到 命名服务,以便其他服务可以发现端点地址 这项服务。这使您能够在 作为来宾可执行文件的服务。发布的端点地址是 形式为 UriScheme://IPAddressOrFQDN:Port/PathSuffix。 UriScheme 和 PathSuffix 是可选属性。 IPAddressOrFQDN 是 IP 地址 或放置此可执行文件的节点的完全限定域名 开,它是为你计算的。
我将其解释为,如果我的ServiceManifest.xml 有两个UseImplicitHost="true",那么它应该自动为命名服务提供由端点描述构造的 url。
http://localhost:19081/sf_node_test_02/NodeApp -> http://localhost:30032
服务结构会自动为命名服务提供此服务的侦听地址是否正确?
我是否可以检查命名服务中的映射? 这会让我知道它是否有我的节点应用程序的条目,但它与我的预期不同,或者实际上它没有条目。
如果它没有条目,那么我也不知道这个来宾可执行应用程序在部署在云中时如何对公众可见。
【问题讨论】: