一,前言。
以前一直在用WebService,突发奇想能用WCF不再用WebServer,毕竟微软一直在推崇WCF。(当然具体情况具体分析,毕竟为了学习)
C#里的WebService可以理解为WCF的一个分支(没见过任何一篇文章表露过“WCF包含WebService”的意思,所以只能这样理解一下,大多数还是认为WebService和WCF是不同的东西,wcf可以用来简化WebService的开发)
1.WebService与WCF的区别
Service是早期的技术实现了,也是soap的东西,采用的主要是http协议。微软的Web服务实现称为ASP.NET Web Service,采用Web Service 规范。它使用Soap简单对象访问协议来实现分布式环境里应用程序之间的数据交互。更新完善几代后,微软就推崇WCF了。
WCF的话是相对较新的技术,它的目标不仅仅是在支持和集成Web Service,因为它还兼容和具备了微软早期很多技术的特性。(这里也是认为WebService与WCF是不同东西的原因之一,它并不能简单组合Web Service的东西,需要改动许多东西来兼容更多东西。就像.NET Framework与.NET5一样)它整合了.Net平台下所有的和分布式系统有关的技术。如Enterprise Sevices(COM+).Net Remoting、Web Service(ASMX)、WSE3.0和MSMQ消息队列。
以通信(Communiation)范围而论,它可以跨进程、跨机器、跨子网、企业网乃至于 Internet;
以宿主程序而论,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host);
WCF可以支持的协议包括TCP,HTTP,msmq、命名管道等,里面的basichttpbinding可以跟以前的ws进行通信。跨进程以及自定义;
安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。
也就是说,在WCF框架下,开发基于SOA的分布式系统变得容易了。
这里只能摘抄记录这么多了,详见:WCF和webservice的区别 —— 斜阳雨陌
请问WCF 跟 WebService之间的相同跟异同(这个讲的挺细,它里面认为Web Service 就是 ASP.NET Web Service,与WCF比,前者规范,后者是框架,不是一个范畴,这又是认为WebService与WCF是不同东西的原因之一)
注:WebService传输数据支持json等不单单支持xml
WCF 比Service传输快,但当WCF使用BasicHttpBinding的时候与ASP.NET Web Service协议速度差不多一样。
对应上文的分析,我并不关心WebService与WCF是不是包含关系(无聊的面试官才会去问你这些,大胆的说就好了),我只关心它的运行速度,安全性,开发效率。这些过几年在告诉你吧。
二,第一个WCF程序
1.开发环境:
操作系统:Windows 7
开发环境:VS2017
编程语言:C#
IIS版本:7.0
2.参照:使用C#创建WCF服务控制台应用程序,完成第一个程序,下面我只会放几张截图。
浏览器输入“http://localhost:81/MyWCFService.MyWCFService.svc”进行验证部署完的结果:
下面这里不要点击右侧发现,发现的只是本方案中的,不是部署在IIS中的。
WCFTestClient.Program代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WCFTestClient.MyWCFReference; namespace WCFTestClient { class Program { static void Main(string[] args) { MyWCFServiceClient client = new MyWCFServiceClient(); Console.WriteLine(client.GetData(123456)); CompositeType cType = new CompositeType() { StringValue = "Hello World!", BoolValue = true }; Console.WriteLine(client.GetDataUsingDataContract(cType).StringValue); // 运行到这里花了11.144秒的时间,额。。。 client.Close(); Console.ReadLine(); } } }
结果:
与webservice对比可以发现写法基本一样。
捕抓到一个和我差不多的人@你若安好,便是晴天! by cnxy.me
不同的时间做了一些相同的事:获取键盘事件,WPF,SQLite,LINQ,加密,WCF,DevExpress,都习惯用Winfrom,SQLServer啥的。哈哈哈。。。把大佬的知识都学过来。哈哈哈哈。
三,WCF程序——
未完。