在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三方服务采用的是基于SOAP协议的场景,在这篇文章中,我们将会讨论如何在 ASP.Net Core 中对接 WCF。
创建 WCF
WCF 是一个安全可靠的消息平台,它提供统一的编程模型便于开发基于面向服务的应用程序,你可以使用 WCF 构建基于 SOAP 协议的服务,并使用 xml 作为数据交换格式,或者基于 REST 的 json 数据交换格式。
这一节中首先创建一个 WCF SOAP 服务,在创建项目模板的时候选择 WCF Service Application
即可,如下图所示:
值得注意的是,WCF 通常由以下几个部分组成。
-
Service 类
-
Service 契约
-
Operation 契约
-
Endpoints 端点
-
Hosting 环境
当要使用 WCF,需要在类和方法上分别加上:ServiceContract
和 OperationContract
,下面的代码展示了一个契约类仅包含一个契约方法的代码定义。
[ServiceContract]
public interface IAuthorService
{
[OperationContract]
List GetAuthorNames();
}
接下来定义一个 AuthorService
服务类实现一下 IAuthorService 接口,下面的代码展示了 AuthorService 类的具体定义。
public class AuthorService : IAuthorService
{
public List GetAuthorNames()
{
List lstAuthors = new List();
lstAuthors.Add("Joydip Kanjilal");
lstAuthors.Add("Steve Smith");
lstAuthors.Add("Michael Stevens");
return lstAuthors;
}
}
这就是构建 WCF 服务的所有步骤,接下来就可以打开浏览器对服务进行简单测试了。
在 ASP.Net Core 中使用 SOAP 服务
与传统的 ASP.NET 不同,ASP.Net Core 中并没有 Add Service Reference
选项去添加对 WCF 服务地址的引用,新的操作方式需要利用 Microsoft WCF Web Service Reference Provider
来进行服务引用,如下图所示:
当点击图中的 Finish 之后,VS会自动帮你完成一系列的初始化,比如从SOAP服务中下载元数据,生成客户端的代理代码,自动生成 Reference.cs
文件,等等。
好了,接下来可以在 Controller 中初始化 SOAP Service ,然后再调用 Service 端的 GetAuthorNamesAsync() 方法,如下代码所示:
[HttpGet]
public async Task Get()
{
ServiceReference1.AuthorServiceClient authorServiceClient = new ServiceReference1.AuthorServiceClient();
var data = await authorServiceClient.GetAuthorNamesAsync();
return data;
}
WCF Connected Service 是 Visual Studio 的一个扩展插件,它允许在 ASP.Net Core 项目中实现对 WCF 服务的引用,当然,除了WCF还可以引用 Azure Storage
服务,关于 Azure Storage 的更多细节,我会在后面的文章中和大家细聊。