通过公共IP和localhost

时间:2018-04-01 16:11:54

标签: c# azure azure-service-fabric asp.net-core-webapi

我正在尝试创建一个ASP.NET Core WebAPI有状态服务,该服务将托管在Azure上,并可从App Service应用程序访问。我已经通过Visual Studio成功创建了Service Fabric集群,并指定了默认端口80和83并在其上发布了我的应用程序。 https://appname.region.cloudapp.azure.com:19080/Explorer/index.html可访问,并显示处于“正常”状态的节点和应用程序。

    <Endpoint Name="ServiceEndpoint" Protocol="http" Type="Input" Port="8210" />

是我的端点,在ServiceManifest.xml中指定。该服务包含可通过其访问的控制器  本地群集上的http://localhost:8210/9a81c1e2-6f46-4570-a2f9-dafc3e73d9bc/131670697090937724/8e909880-81f7-46e1-87e6-f8c3cf960249/api/values端点。尽管如此,所有教程和相邻的Stack Overflow问题都提到该服务应该通过常规localhost:8210 / api / values链接访问,但我收到410 Gone状态代码。

我手动添加了指向/ api / values url并指定8210端口的HTTP探测器。之后,我更新了现有的Load Balancer规则,将80(HTTP)端口转发到8210后端端口并指定了我的Health探测器。

问题是,没有任何预期的URL可以访问。以下所有变体在长时间加载后返回404:

http://appname.region.cloudapp.azure.com/
http://appname.region.cloudapp.azure.com/api/values
51.136.XX.XXX/api/values
51.136.XX.XX:80/api/values

我正在使用Kestrel作为Web主机使用的服务器。除了无法访问的公共IP之外,我主要担心的是localhost端点在没有Service Explorer提供的长数据的情况下无法工作。问题可能不在于Azure Service Fabric配置,而是服务本身。

可能是什么原因?我使用了错误的网址吗?

更新:我应该澄清问题,只有在我使用ASP.NET核心状态 ful 服务模板时才会出现。将ASP.NET核心状态 less 服务上传到localhost和Azure并访问所有api端点时没有问题。

1 个答案:

答案 0 :(得分:1)

我建议使用内置的Reverse Proxy

确保传递分区键&amp; kind,表示您要访问的有状态服务副本。

http(s)://<Cluster FQDN | internal IP>:Port/<ServiceInstanceName>/<Suffix path>?PartitionKey=<key>&PartitionKind=<partitionkind>&ListenerName=<listenerName>

您的服务可能会像这样访问:

http://appname.region.cloudapp.azure.com/myservice/api/values?PartitionKey=0&PartitionKind=Int64Range

分区主要说明:

  

对于分区服务,这是计算的分区键   您想要覆盖的分区。请注意,这不是分区   ID GUID。使用该服务的服务不需要此参数   单例分区方案。