【问题标题】:Can't communicate with service using DNS in service fabric无法使用服务结构中的 DNS 与服务通信
【发布时间】:2017-11-27 03:33:35
【问题描述】:

我试图让无状态服务向另一个服务发送值,只是为了通过使用服务结构中的 DNS 服务来实现服务之间的通信。我已经用邮递员测试了这两个应用程序,它们工作正常。我正在关注this tutorial,这样做似乎很简单。

DNS 服务已启用:

无状态服务有一个 DNS 名称: DNS 名称在 ApplicationManifest.xml 中配置

<Service Name="SocketService" 
 ServiceDnsName="SocketService.TimeSeriesActorApplication" 
 ServicePackageActivationMode="ExclusiveProcess">
    <StatelessService ServiceTypeName="SocketServiceType" 
     InstanceCount="[SocketService_InstanceCount]">
       <SingletonPartition />
   </StatelessService>
</Service>

然后我尝试向服务发送一个 http get,就像在教程中一样。

using (var client = new HttpClient())
{
 client.BaseAddress = new Uri("http://socketservice.timeseriesactorapplication:8712/api/");
 var response = await client.GetAsync("values");
}

但我得到一个例外:

WebException:无法解析远程名称:'socketservice.timeseriesactorapplication'

当我按照教程建议使用端口 8080 以及使用我在 ServiceManifest.xml 中指定的端口时,都会发生这种情况。

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

我在这里错过了什么?

更新: 使用 localhost 而不是 dns-name 也可以。

Github 上的问题:Unable to resolve service DNS name #332

【问题讨论】:

  • 刚刚完成了教程,没有任何问题。您的客户在哪里发起呼叫?
  • 两者都是在本地服务结构集群中运行的无状态服务。我正在与邮递员一起向其中一个人发出 get-request,该请求再次试图通过第二个 get 请求到达另一个人。
  • 当你说使用 localhost - 这也是服务到服务的通信吗?
  • 是的。在服务之间进行通信时,使用 localhost 而不是我指定的 DNS 名称可以工作
  • 推荐你在这里打开一个问题:github.com/Azure/service-fabric-issues/issues - 我会联系一些工程师来帮助解决你的问题。似乎没有明显的原因为什么这不起作用。

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


【解决方案1】:

我看到您正在运行服务结构 5.6.210。最近的 5.6.220 版本 (https://blogs.msdn.microsoft.com/azureservicefabric/2017/06/20/release-of-sdk-2-6-220-and-runtime-5-6-220-refresh-for-windows/) 包含一些针对 DNS 服务的修复。请注意,即使我运行的是 5.6.220,我注意到 DNS 名称解析似乎并不总是在我的本地计算机上部署后立即开始工作(我必须重新部署或等待几分钟)。如果您在本地运行,您可以在终端窗口中测试名称解析 - 只需 ping 您的服务的 DNS 名称。

【讨论】:

  • 已更新至最新版本,但仍无法正常工作。 ping 我的服务的 DNS 名称也不起作用。
  • 在 ping 之前尝试刷新 DNS 缓存 (ipconfig /flushdns)。此外,在我看来,DNS 服务通过在您的计算机上本地运行 DNS 服务器并将您的计算机添加到主适配器的 DNS 服务器列表的顶部来工作。因此,如果您执行 ipconfig /all,您应该会在该适配器的 DNS 服务器列表的顶部看到您的主适配器 IP 地址。如果它不存在,则可能有问题。
【解决方案2】:

我通过使用 ipconfig /flushdns 刷新 DNS 来修复它。 我还发现本地 IP 是我的 DNS 链中的第一个 DNS 服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 2020-08-05
    • 1970-01-01
    • 2014-03-07
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多