C#-WCF协议通讯_Net5

一、前言

  以前一直在用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、创建WCF程序

(1)参照使用C#创建WCF服务控制台应用程序,完成第一个程序并部署在IIS中,下面我只会放几张截图。

  浏览器输入“http://localhost:81/MyWCFService.MyWCFService.svc”进行验证部署完的结果:

(2)创建调用WCF的示例(参照使用C#创建WCF服务控制台应用程序

  下面这里不要点击右侧发现,发现的只是本方案中的,不是部署在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对比可以发现写法基本一样。

3、补充:C#-WCF中传输List对象

 

捕抓到一个和我差不多的人@你若安好,便是晴天!by cnxy.me

  不同的时间做了一些相同的事:获取键盘事件,WPF,SQLite,LINQ,加密,WCF,DevExpress,都习惯用Winfrom,SQLServer啥的。哈哈哈。。。把大佬的知识都学过来。哈哈哈哈。

posted @ 2021-02-20 15:52  ꧁执笔小白꧂  阅读(320)  评论(0编辑  收藏  举报