关于WCF、WebAPI、WebService之间的区别总结 分布式通信技术

早在1996年Gartner就前瞻性地提出了面向服务架构的思想(SOA),SOA 的走红在很大程度上归功于 Web Service 标准的成熟和应用的普及。

Service Oriented Ambiguity 中文一般理解为:面向服务架构,简称SOA,这个概念算得上微服务的鼻祖了。

SOA 的提出是在企业计算领域,就是要将紧耦合的系统,划分为面向业务的、粗粒度、松耦合、无状态的服务。服务发布出来供其他服务调用,一组互相依赖的服务就构成了SOA架构下的系统。

SOA 本质上是服务的集合。

在分布式通信技术选型中,就本人曾经使用过的基于微软平台的分布式通信进行概述,先明确一下分布式框架的三个基本需求:

  • 客户端:Web、Android、IOS、跨平台(Java 开发的系统和.NET 开发的系统可以通信)

  • 服务端:部署在Windows、Linux

  • 合约(Contract):传递的格式(REST,Json、SOAP、XML)、通信协议(HTTP、XML-RPC、TCP)、消息超时设置、消息包大小

要打造分布式平台,各家技术栈多有不错的实践,这里重点说一下微软技术栈下,丰富的技术选型:

  • .NET Remoting (15年前技术,目前已经失传)

  • Web Service (ASMX, ASP .NET Web Services,15年前技术,维护项目依然存在)

  • WCF (Windows Communication Foundation,10年前技术,维护项目中比较多)

  • Web API (5年前技术开始火起来,和跨平台需求密不可分,最近3年的新需求大部分迁移在这里了)

下面展开来说:

.NET Remoting

是2.0时代的产物, 即2004年的技术,我还没有机会实战过。在微软Roadmap中已被WCF取代(.NET Remoting做得到的事,理论上WCF都可以实现) 依据微软一份,WCF在效能上比ASP.NET Web Service快了25%-50%,比.NETRemoting快25%,弃.NET Remoting改用WCF将有性能能上的突破。详见报告链接。

Web Service

在很早前开发WebForm ASP.NET中用的比较多,因此可以将 Web Service 理解为一个基于 HTTP 协议开发的上层应用程序

Web service 是一个平台独立的,低耦合的,自包含的、基于可编程的 Web 的应用程序,可使用开放的 XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。Simple Object Access Protocol,中文为简单对象访问协议,简称 SOAP。

1、它是基于SOAP协议的,数据格式是XML (SOAP )2、只支持HTTP协议3、它不是开源的,但可以被任意一个了解XML的人使用4、它只能部署在IIS上

SOA 不是 Web Service,Web Service 是当年最适合实现SOA的技术。

WCF

WCF是取代Web Service及.NET Remoting的接班人,我记得这个是微软2010年开始力推的技术。

我第一次是用WCF是2012年,做一个电信级项目,结合微软吹水的Silverlight技术(Silverlight技术,2013年底该技术被微软安乐死了,again!)

1、这个也是基于SOAP的,数据格式是XML2、这个是Web Service(ASMX)的进化版,可以支持各种各样的协议,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.3、WCF的主要问题是,它配置起来特别的繁琐!!!(此处特别强调了3个感叹号 )4、它不是开源的,但可以被任意一个了解XML的人使用5、它可以部署应用程序中或者IIS上或者Windows服务中

WCF门槛有些太高,仅仅在Windows平台开发,而且配置文件比较复杂(WCF 客户端\WCF 服务器端,仅Binding、Behavior的复杂度就能单独写一篇文章,踩过不少坑,都是泪。)

众所周知,微软.net技术未来是.netCore,成熟的.NetCore3 2019年底就可以应用于生产系统了, 但多年来微软一直拒绝将WCF 的服务器端移植到.NET Core, 导致这个分布式技术,面临的极大的技术瓶颈,即若干年后几无可用人才来维护WCF项目,所以大约3年前开始,我知道周围朋友公司的新项目大都避而不谈WCF了。

随着SOAP 逐渐淡出,RESTful大行其道, Web API火了起来。

微软技术栈的工程实现是 ASP.NET Web API,而且微软建议使用 ASP.NET Core Web API 或 gRPC,它们提供基于跨平台和跨编程语言的 RPC,也能使用 gRPC 来编写代码,并替换掉一些 WCF 服务器服务。

1、一个简单的构建HTTP服务的新框架2、在.net平台上Web API 是一个开源的、理想的、构建REST-ful 服务的技术3、不像WCF REST Service.它可以使用HTTP的全部特点(比如URIs、request/response头,缓存,版本控制,多种内容格式)4、它也支持MVC的特征,像路由、控制器、action、filter、模型绑定、控制反转(IOC)或依赖注入(DI),单元测试。这些可以使程序更简单、更健壮5、它可以部署在应用程序和IIS上6、这是一个轻量级的框架,并且对限制带宽的设备,比如智能手机等支持的很好7、Response可以被Web API的MediaTypeFormatter转换成Json、XML 或者任何你想转换的格式。

WCF 的未来是Web API,而且微软2014年推出开源.NetCore中就有ASP.Net Core Web API,可见重视程度。

分布式技术这么多,我该选谁?

都2019年了,新项目肯定是WebAPI,原因如下:

WebAPI只要有能力发送HTTP Request跟解析JSON,比较符合微服务要求, 跨平台支持。创建一个基于HTTP的面向资源的服务并且可以使用HTTP的全部特征时(比如URIs、request/response头,缓存,版本控制,多种内容格式),你应该选择WebAPI让你的服务用于浏览器、手机、iPhone和平板电脑时,你应该选择Web API双工消息模式,过SignalR和WebSockets整合(创建一个支持消息、消息队列、双工通信的服务时)

原文链接:https://www.jianshu.com/p/54192c6df483


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET中的值类型与引用类型

.NET中的值类型与引用类型这是一个常见面试题,值类型(Value Type)和引用类型(Reference Type)有什么区别?他们性能方面有什么区别?TL;DR(先看结论)值类型引用类型创建位置栈托管堆赋值时复制值复制引用动态内存分配无需…

跨语言调用Hangfire定时作业服务

背景Hangfire允许您以非常简单但可靠的方式执行后台定时任务的工作。内置对任务的可视化操作。非常方便。但令人遗憾的是普遍都是业务代码和hagnfire服务本身聚合在一个程序中运行,极大的限制了hangfire的扩展和跨语言调用。所以萌生了开发一个支持restful api调用的…

可落地微服务on k8s的持续集成/部署方案

我们隔一流的软件生产工艺还有多远?在距离15000公里外,Amazon一年可以进行5000万次部署,在这一边某电商平台的研发部门里,让他们引以为傲的是他们正在进行“敏捷”开发模式,并对外号称他们是以每周为迭代来进行升级。时…

Codeforces Round #579 (Div. 3) F1. Complete the Projects (easy version) 排序 + 贪心

传送门 文章目录题意:思路:题意: 思路: 比较直观的想法就是对于bi≥0b_i\ge0bi​≥0的项目,我们将aia_iai​从小到大排序,让后依次加bib_ibi​,如果有取不到的,显然就无解。否则再看…

历久弥新 - 微软万亿市值背后的文化支撑(下)|DevOps案例研究

内容来源:DevOps案例深度研究-Microsoft文化支撑研究战队(本文只展示部分PPT研究成果,更多细节请关注案例分享会,及本公众号。)本案例内容贡献者:陈飞(Topic Leader)、陈雨卿、郭子奇…

架构杂谈《九》

微服务与轻量级通信机制微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间胡亮协调、互相配合,为用户提供最终价值。在微服务架构中,服务与服务之间通信时,通常是通过轻量级的通信机制&#…

Codeforces Round #585 (Div. 2) E. Marbles 状压dp + 逆序对

传送门 文章目录题意:思路:题意: 思路: 考虑数列最终的状态一定是相同颜色在一起,所以我们发现他的颜色是有顺序的!显然可以用状压dpdpdp来枚举颜色的顺序,但是又有问题了,你怎么确…

GitLab CI 自动部署netcore web api 到Docker

前端篇文章中,我们已经成功的将asp.net core webapi在Docker容器中运行,并且部署了一套自己的GitLab环境。.Net & Docker(二)5分钟快速用Docker部署你自己的GitLab.Net & Docker(一)在Docker容器上…

.net core 实现基于 cron 表达式的任务调度

.net core 实现基于 cron 表达式的任务调度Intro上次我们实现了一个简单的基于 Timer 的定时任务,详细信息可以看这篇文章 。但是使用过程中慢慢发现这种方式可能并不太合适,有些任务可能只希望在某个时间段内执行,只使用 timer 就显得不是那…

ASP.NET Core Identity自定义数据库结构和完全使用Dapper而非EntityFramework Core

前言原本本节内容是不存在的,出于有几个人问到了我:我想使用ASP.NET Core Identity,但是我又不想使用默认生成的数据库表,想自定义一套,我想要使用ASP. NE Core Identity又不想使用EntityFramework Core。真难伺候&…

什么是微服务?为什么你要用微服务?

前言最近几年微服务很火,大家都在建设微服务,仿佛不谈点微服务相关的技术,都显得不是那么主流了。近几年见识到身边朋友的很多公司和团队都在尝试进行微服务的改变,但很多团队并没有实际微服务踩坑经验,很多团队甚至强…

P5367 【模板】康托展开

传送门 文章目录题意:思路:题意: 思路: 存个板子 // Problem: P5367 【模板】康托展开 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P5367 // Memory Limit: 64 MB // Time Limit: 1200 ms // // Powered by …

微软开源基于.NET Core的量子开发工具包 QDK

微软最近开源了量子开发工具包(Quantum Development Kit,QDK),旨在使“量子计算和算法开发对开发人员来说更容易、更透明”。微软 QDK 包括 Q#编译器、量子库和量子模拟器。微软在 2017 年底的 Ignite 大会上发布了量子开发工具包…

UVA11525 Permutation 逆康托展开

传送门 文章目录题意:思路:题意: 思路: 逆康托展开板子 // Problem: UVA11525 Permutation // Contest: Luogu // URL: https://www.luogu.com.cn/problem/UVA11525 // Memory Limit: 0 MB // Time Limit: 3000 ms // // Power…

Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站

点击上方蓝字关注“汪宇杰博客”导语微软智慧云 Azure 上虽然早就有 App Service 这种完全托管的 PaaS 服务可以让我们分分钟建网站。但是不自己配一下环境,就不能体现技术含量,容易被说微软的人都只会点鼠标。年轻的时候不敲命令,什么时候可…

Codeforces Round #285 (Div. 2) D. Misha and Permutations Summation 康托展开 + 线段树

传送门 文章目录题意:思路:题意: 思路: 首先肯定不能模n!n!n!,所以考虑先将a,ba,ba,b做一个逆康托展开,得到a′,b′a,ba′,b′数组,以及a′b′sumabsuma′b′sum数组,让后我们可以通…

「PowerBI」使用TabularEditor进行PowerBIDeskTop模型开发最佳实践

前面系列文章介绍的场景,设定的工具使用对象是Sqlserver和Azure 的SSAS数据模型开发,其实TabularEditor亦可以有限度地使用在PowerBIDeskTop的模型开发上,本文简单介绍下其最佳的使用场景。PowerBIDeskTop模型不同于Sqlserver的SSAS模型虽然大…

E:Three Blocks Palindrome(hard and easy)(树状数组 ? 前缀和?)

Three Blocks Palindrome (hard version) 思路 考虑到每个数字的范围是12001 ~ 2001 200,于是我们可以通过枚举两侧的元素来寻找最优答案。 我们有一个贪心策略,两侧都以我们枚举的元素作为结尾点,假如我们当前枚举的数字是1,于…

树莓派 + Windows IoT Core 搭建环境监控系统

前言:Windows IoT 是微软为嵌入式开发板设计的一种物联网操作系统,运行Windows UWP(C# 开发),可以设计出丰富的交互界面,驱动GPIO,连接一些传感器做有意思的事,本文详细介绍如何使用…

CF1547F Array Stabilization (GCD version) st表 + 尺取/二分

传送门 题意: 思路: 容易发现,我们将所有aaa都除上所有aaa的gcdgcdgcd,实际上就是让你求一个最小的lenlenlen,对于所有iii,gcd(ai,ai1,...,ailen−1)1gcd(a_i,a_{i1},...,a_{ilen-1})1gcd(ai​,ai1​,...…