在 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,需要在类和方法上分别加上:ServiceContractOperationContract,下面的代码展示了一个契约类仅包含一个契约方法的代码定义。

[ServiceContract]public interface IAuthorService{[OperationContract]List<string> GetAuthorNames();}

接下来定义一个 AuthorService 服务类实现一下 IAuthorService 接口,下面的代码展示了 AuthorService 类的具体定义。

public class AuthorService : IAuthorService{public List<string> GetAuthorNames(){List<string> lstAuthors = new List<string>();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<string[]> 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 的更多细节,我会在后面的文章中和大家细聊。

译文链接:https://www.infoworld.com/article/3323584/how-to-consume-a-wcf-soap-service-in-aspnet-core.html

如何在 ASP.Net Core 中对接 WCF相关推荐

  1. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  2. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  3. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

  4. 如何在 ASP.Net Core 中使用 MediatR

    MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...

  5. 如何在 ASP.Net Core 中使用 NCache

    虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式. 内存缓存 分布式缓存 Response缓存 Alachisoft 公司提供了一个开源项目 NCache, ...

  6. 如何在 ASP.Net Core 中使用 Configuration Provider

    ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配 ...

  7. 如何在 ASP.Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

  8. 如何在 ASP.NET Core 中使用 URL Rewriting 中间件

    URL rewriting 是根据预先配置好的一组规则去修改 request url,值得注意的是:URL Rewriting 的重写功能和 url 重定向 是两个概念,本篇我们就来讨论下如何在 AS ...

  9. 如何在 ASP.NET Core 中使用 Quartz.NET 执行任务调度

    当我们在web开发中,常常会遇到这么一个需求,在后台执行某一项具体的任务,具体的说就是这些任务必须在后台定时执行. Quartz.NET 是一个开源的 JAVA 移植版,它有着悠久的历史并且提供了强大 ...

最新文章

  1. mysql internal_MySQLInternal笔记
  2. 大数据是怎么知道你去过新发地的?
  3. Centos6.5下安装java1.7+apache-tomcat7.5
  4. 【Python学习系列五】Python网络爬虫框架Scrapy环境搭建
  5. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第3章-采样环境下带有领航者的二阶多智能体系统的一致性
  6. Matlab:成功解决Undefined function or variable B
  7. DFS应用——遍历无向图
  8. 数据结构之图:有向图的拓扑排序,Python代码实现——26
  9. Html5与CSS3权威指南 百度云下载
  10. Tomcat 配置数据库连接池
  11. AcWing 91. 最短Hamilton路径(状态压缩DP+哈密顿回路)
  12. copula 重现期 matlab,合肥市干旱识别及基于Copula的特征值重现期分析
  13. 遥感影像辐射校正,地形校正等
  14. masm编译.asm文件报错fatal errorA1000: cannot open file
  15. 【持续更新】书籍推荐
  16. 彻底卸载CAD或者其他任何软件、删除注册表的神奇-YourUninstallerPortable.exe
  17. 树莓派制作游戏机教程
  18. 微机大作业—— 24秒倒计时器
  19. NSA方程式泄漏工具包浅析
  20. 2021最新某某文书列表参数pageId、ciphertext、__RequestVerificationToken以及接口返回数据result逆向分析(二)

热门文章

  1. MySQL日期数据类型、时间类型使用总结
  2. [bzoj1050 HAOI2006] 旅行comf (kruskal)
  3. C++设计模式之工厂模式(1)
  4. iOS笔记之UIKit_UINavigationController
  5. c++ why can't class template hide its implementation in cpp file?
  6. 多比Web 3D展示(3D机房/3D监控)中间件多比Web 3D展示(3D机房/3D监控)中间件免费下载购买地址...
  7. JDK中DNS缓存的分析
  8. QtWebkit中浏览器插件的设计-1
  9. [转载MSDN]IIS 7.0中的Live Smooth Streaming -入门
  10. word中图片超出页边距_如何在Word中更改页边距