• WCF(一) Windows Communication Foundation 概述


     我希望能用连续的几篇博文,记录下自己学习WCF的过程,同时也为了能和大家一起交流分享自己学习WCF的心得。

    学习WCF的英文资料对英文基础不太好的人来说有些难以接受了,中文书籍不太多,好不容易有两本,又写的像研究生毕业论文一样。

    所以,我想写点自己的WCF文章,希望能对自己的WCF知识起到促进作用,又能和大家一起交流,帮助到大家理解WCF。

    宗旨:我不会用中文的专业术语(例如:协定,地址,绑定,通道,终结点,宿主,单工、双工,回调等),因为用一个英文单词可以被多个人翻译成多个中文词语,这样不好。我坚持使用英文的原本单词(如:contract,Address,binding,pipe,endpoint,host,one-way ,duplicate,call back)。

    本人最为“痛恨”那种满口专业术语讲技术概念的人。如果学习所有的技术都要先被大量技术名词搞晕掉,那学习实在是太痛苦了。我见识过这样的一本书:当你随意翻开一页,随意找出一段读一读,会发现根本不知道作者在讲什么,因为全是难懂的技术名词和概念。遇到这种情况,英文再差的人宁可去读英文资料。我崇尚的技术教学或交流是通俗易懂的。不论多么复杂的新/旧技术,能简单的一定简简单单的讲出来。做到这一点其实不难,个人认为,作者只需用自己的话来讲就完全可以,越是照搬学术的东西,“貌似权威的”,却是缺少大众亲和力。毕竟大部分人学习的目的不是去作秀写论文,而是去写自己的实实在在的代码的。呵呵。愿IT界的明天更加美好吧。

    闲言少叙,书归正传。

    =======================================================================

    WCF被推出来很久了,但是对于刚刚接触WCF的人们来说,想必会有以下问题:

    WCF是什么?为什么我们需要WCF?WCF能给我们带来什么?学习WCF的难易度如何?

    以上这些问题的答案在网上已经很多介绍了,我在此本不必再浪费口舌,只是大概提一下。

    WCF: Windows Communication Foundation.从名字可以看出,这是一项和通信密切相关的技术。我们知道软件设计到处是通信。当然我们必须学了以后,才能更好的知道它、运用它,而不能单单从它的名字揣测它的威力如何。

    WCF提供给了我们一种面向服务(SOA)的程序设计的解决方案:何为面向服务?之前有使用过.NET Web Service 开发的朋友,很容易理解面向服务是咋回事。.Net Web Service也是更早的时候微软提出的一种面向服务的解决方案。面向服务是一种标准,不同的公司可以给出各自的实现框架。单纯的讲SOA,毕竟太抽象了。学习一下SOA的一种实现比如.Net Web Service 或WCF以后,相信不用任何文字定义,你也会深刻地理解SOA。所以,何为面向服务?这里不解释,等你学一段时间的WCF,你自己就有答案了,真的,呵呵。

    WCF提供了统一的通信模型:以前我们写通信可以是:TCP/UDP,Socket等这些方式,在WCF中被统一了。至于如何统一?这里先不说了。所以,当你在项目中同时使用了多种通信方式时,可以考虑使用WCF了。

    以前没有接触过Web Service 开发接受WCF也不是难事,相信我!

    这次,我们只做一点WCF的概述,更为详细的知识到后面再慢慢展开。边学习,边交流。

    1. 打开VS 2010 -->file-->new Project ,选择C#下面的WCF,选择WCF Library。如下图:

    2.此时有了IService 文件和一个Service 文件。Service文件实现的IService中的两个函数:GetData函数和GetDataUsingDataContract函数。至于这两个函数是干嘛的?想必不用说大家都能看懂的。之后详细说明他们的角色。这里也不修改类名和函数名了,方面起见。

    3.按F5运行程序,此时打开了一个WCF 的一个测试 窗口。如下图:先测试GetData函数

    测试结果:

    同样的方法测试GetDataUsingDataContract函数:结果如下图

    4.上面完成了对WCF的函数功能的简单测试,能说明的是Service正确地实现了IService。接下来我们需要将这个WCF部署到一个Web Site中。

    在解决方案上面右击:New -->New Web Site 如下图:

    修改web site项目中的Service.svc 文件里面的 Service="WcfFirstDemoServiceLib.Service1" (其中意思就是已命名空间加类名的方式指定service的名字)

     5.添加一个winForm程序 ,用它来调用WCF的函数。

    6.给winForm 项目添加web 引用:

    7.在Form1上面添加几个控件,然后再在Form1.cs中添加下列几行代码:

    Form1.cs
     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 using WCFClient.WCFServiceDemo;
    10 
    11 namespace WCFClient
    12 {
    13     public partial class Form1 : Form
    14     {
    15         Service1Client proxy = null;
    16         CompositeType ctin = null;
    17         CompositeType ctout = null;
    18         public Form1()
    19         {
    20             InitializeComponent();
    21         }
    22 
    23         private void btnGetData_Click(object sender, EventArgs e)
    24         {
    25             this.tbOutputBox.Text = proxy.GetData(Convert.ToInt32(this.tbInputbox.Text));
    26         }
    27 
    28         private void Form1_Load(object sender, EventArgs e)
    29         {
    30             proxy = new Service1Client();
    31 
    32         }
    33 
    34         private void button2_Click(object sender, EventArgs e)
    35         {
    36             ctin = new CompositeType();
    37             ctin.StringValue = this.tbInputCTStrvalue.Text;
    38             ctin.BoolValue = this.rboxInTrue.Checked;
    39             
    40             ctout = proxy.GetDataUsingDataContract(ctin);
    41 
    42             this.tbOutputCTStrvalue.Text = ctout.StringValue;
    43             if (ctout.BoolValue)
    44             {
    45                 this.rboxOutTrue.Checked = true;
    46             }
    47             else
    48             {
    49                 this.rboxOutFalse.Checked = true;
    50             }
    51         
    52         }
    53     }
    54 }

    8.Ctrl+F5 运行:

    说明:这里只是概述WCF,所以全部在使用WCF的默认设置,也没有详细说明每一步的作用是什么。只是给出三个项目:项目1是WCF的库也是WCF功能核心。项目2是WCF的host用于向外界发布WCF提供的接口(:接口这里指提供了哪些函数可被调用)。项目3是WCF的客户端用于调用WCF。其实,这里已经隐约体现出一点点分布式软件架构的意思了:有专门提供功能实现的模块,有专门提供对外公开接口的模块,有专门作为调用的模块。

    后面详细WCF每一部分的。欢迎关注!!

  • 相关阅读:
    jQ的工具类方法
    jq-ajax
    jq-ajax-get
    LOAD
    JQ的尺寸类
    JQ-DOM与元素的操作
    jQ-DOM属性的操作
    jQ的事件
    3位创业公司CEO亲述:200人的小公司,这么做数据管理就对了
    十二潜意识的智商
  • 原文地址:https://www.cnblogs.com/marksun/p/WCF.html
Copyright © 2020-2023  润新知