ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析。
本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host。
因为WCF中不仅仅只是有SOAP, 它还包含很多如消息安全性,生成WSDL,双工信道,非HTTP传输等。
ASP.NET Core 官方推荐大家使用RESTful Web API的解决方案提供网络服务。
SOAP 即 Simple Object AccessProtocol 也就是简单对象访问协议。
SOAP 呢,其指导理念是“唯一一个没有发明任何新技术的技术”,
是一种用于访问 Web 服务的协议。
因为 SOAP 基于XML 和 HTTP ,其通过XML 来实现消息描述,然后再通过 HTTP 实现消息传输。
SOAP 是用于在应用程序之间进行通信的一种通信协议。
因为是基于 XML 和HTTP 的,所以其独立于语言,独立于平台,并且因为 XML 的扩展性很好,所以基于 XML 的 SOAP 自然扩展性也不差。
通过 SOAP 可以非常方便的解决互联网中消息互联互通的需求,其和其他的 Web 服务协议构建起 SOA 应用的技术基础。
下面来正式开始 ASP.NET Core 实现SOAP 服务端解析。
新建项目
首先新建一个ASP.NET Core Web Application -》 SOAPService 然后再模板里选择 Web API。
然后我们再添加一个Class Library -》 CustomMiddleware
实现
下面我们来实现功能,首先在类库项目中添加以下引用
Install-Package Microsoft.AspNetCore.Http.Abstractions Install-Package System.ServiceModel.Primitives Install-Package System.Reflection.TypeExtensions Install-Package System.ComponentModel
首先新建一个 ServiceDescription、ContractDescription和OperationDescription 类,这里需要注意的是ServiceDescription,ContractDescription和OperationDescription这里使用的是不能使用 System.ServiceModel.Description命名空间中的类型。它们是示例中简单的新类型。
ServiceDescription.cs
public class ServiceDescription
{
public Type ServiceType { get; private set; }
public IEnumerable<ContractDescription> Contracts { get; private set; }
public IEnumerable<OperationDescription> Operations => Contracts.SelectMany(c => c.Operations);
public ServiceDescription(Type serviceType)
{
ServiceType = serviceType;