从 .net 核心调用 Service Fabric

Posted

技术标签:

【中文标题】从 .net 核心调用 Service Fabric【英文标题】:Call Service Fabric from .net core 【发布时间】:2017-08-31 12:39:35 【问题描述】:

我正在探索 Azure 的 Service Fabric Microservices 功能并非常喜欢它。我在那里托管了一些简单的 WCF 服务,我可以使用 WcfClientCommunicationFactory 类从 .NET Framework 客户端调用这些服务。一切正常。

现在我想从 .NET Core 控制台应用程序调用我的微服务。这些关键字的搜索结果倾向于使用 .NET Core 来实现实际服务,但我想将 .NET Core 用于客户端。

.NET Core 应用可以与 Service Fabric 微服务通信吗?如果是这样,WcfClientCommunicationFactory 的 .NET Core 等效项是什么?

【问题讨论】:

这个blogs.msdn.microsoft.com/webdev/2016/06/26/… 有帮助吗?最简单的方法是使用无状态 API 调用集群中的 wcf 服务。客户端可以使用 rest 连接。 【参考方案1】:

工厂的正确名称是WcfCommunicationClientFactory,它位于Microsoft.ServiceFabric.Services.Wcf NuGet package 的Microsoft.ServiceFabric.Services.Communication.Wcf.Client 命名空间中。但它目前与 .Net Core 不兼容,因为整个 WCF 方法和 Service Fabric 不兼容。

Service Fabric 微服务最终是一个 REST 服务,因此您可以通过三种方法来托管它 (from MSDN):

无特定协议:如果您没有特定的通信框架选择,但希望快速启动并运行,那么服务remoting 是您的理想选择,它允许强- 类型化远程过程调用可靠服务和可靠参与者。这是开始服务通信的最简单、最快捷的方式。服务远程处理服务地址的解析、连接、重试和错误处理。这适用于 C# 和 Java 应用程序。 HTTP:对于与语言无关的通信,HTTP 提供了一种行业标准选择,其中包含多种不同语言的工具和 HTTP 服务器,所有这些都受 Service Fabric 支持。服务可以使用任何可用的 HTTP 堆栈,包括用于 C# 应用程序的 ASP.NET Web API。用 C# 编写的客户端可以利用 ICommunicationClientServicePartitionClient 类,而对于 Java,对于 service resolution, HTTP connections, and retry loops,使用 CommunicationClient 和 FabricServicePartitionClient 类。 WCF:如果现有代码使用 WCF 作为通信框架,则可以将 WcfCommunicationListener 用于服务器端,将 WcfCommunicationClient 和 ServicePartitionClient 类用于客户端。但是,这仅适用于基于 Windows 的集群上的 C# 应用程序。有关更多详细信息,请参阅这篇关于 WCF-based implementation of the communication stack 的文章。

注意:您需要ASP.NET Core tools for Visual Studio 2017。适用于 Visual Studio 2015 的 .NET Core 工具不再更新。

注意 #2:虽然 ASP.NET Core 应用可以在 .NET Core 或完整的 .NET Framework 上运行,但 Service Fabric 服务目前只能在完整的 .NET Framework 上运行。这意味着当您构建 ASP.NET Core Service Fabric 服务时,您仍必须以完整的 .NET Framework 为目标。因此,NuGet packages from Service Fabric 中没有一个是针对完整的 .NET Framework。

ASP.NET Core 应用可以作为来宾可执行文件托管在 Service Fabric 上,无需更改代码,但推荐的方法是托管 ASP.NET Core in a Reliable Service 和 Kestrel (NuGet package) 或 WebListener ( NuGet package):

在 Service Fabric 中发布服务器后,您可以使用 HTTP 协议从任何位置连接到它 - Web Frontend、Angular SPA、Xamarin 或简单的 C# HttpClient,所以 客户端不需要针对完整的 .NET Framework,但服务器是。

一些示例代码:

static HttpClient client = new HttpClient();

client.BaseAddress = new Uri(MICRO_SERVICE_URI);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage response = await client.GetAsync(path);
if (response.IsSuccessStatusCode)

    // deserialize the result from JSON
    var result = await response.Content.ReadAsAsync<DtoClass>();

【讨论】:

以上是关于从 .net 核心调用 Service Fabric的主要内容,如果未能解决你的问题,请参考以下文章

如何从.net核心调用ibm watson api

如何使用 Terraform azurerm_app_service 指定 .net 核心版本

如何在asp.net核心中从客户端调用web api方法?

未为部署在 Service Fabric Linux 集群上的 .Net 核心应用生成应用洞察

用于 asp.net 核心的 Service Fabric 中 docker 中的 HTTPS 不起作用

.NET Worker Service 如何优雅退出