最近工作有点忙,感觉有点累啊,很久没有更新博客了,看到自己的博客访问量日渐下降,我于心不忍,决定还是重新开博来吸引大家的关注。这次要说的不是别的,正是大名鼎鼎的wcf。或者在中间我会穿插MVC的说明,毕竟上一个系列MVC也没有写完就过年了,这次希望能坚持到底。呵呵

既然是基础,那我们就来了解一下wcf的前生今世。然后再用一个小实例说明一下就可以结束了。

SOA(面向服务的架构) 大家都很明白,wcf就是.Net平台下为了这个目的为出生的一个精品,作为微软技术的大一统,可以说值得我们深入的学习。

WCF(Windows Communication Foundation)是作为.Net framework 3.0发布的,所以只有2008及其以上的版本才可以创建wcf应用程序,如果你还是使用2005 那么就升级一下吧。

WCF是对现有分布式通信技术的整合,其中包括Com/DCom、.Net Remoting、Web服务及其WSE(web服务的升级版本)、MSMQ。

COM就不用多说了,我也不懂,是采用了面向组件的设计方式,我们可以通过接口来进行调用。说到面向组件的设计方式,还有几种 面向服务的设计(CO)、面向对象的设计(OO).

.Net Remoting 远程调用,可以实现分布式开发,但是不能跨平台或者说是只能是在.Net和.Net之间进行调用。不能实现真正意义上的面向服务。

Web 服务 WSE 可以说是真正意义上的面向服务的设计,可以实现跨平台的调用,但是web服务只能通过http的方式传输,并且安全性、可靠性得不到有效的控制,所以不能完成企业级应用的要求。

MSMQ 是基于Windows的消息队列,它的优点也很多,例如可以支持离线传输、断点传输等。但是只能在同一台服务器或者说是同一台电脑上传输,根本就谈不上分布式。

WCF是现有分布式技术的大一统,整合了这些技术的优点,可以实现可靠性高、安全性高、跨平台、跨语言的调用,并且wcf的学习曲线相对较高,但是要自己亲自动手实现一个简单的wcf服务应用程序也是很简单的。

今天不说wcf 契约、服务 、绑定等内容,留着以后说,要不以后就不能开博了。先来一个msdn上通用的实例来说明创建一个wcf应用程序是多么的easy。

1.创建一个空白的解决方法。

2.创建wcf的项目。我们按照在项目中会实际用到的项目结构来组织。

我来解释一下这些项目的结构。

  1. ConsoleHosting 是一个控制台应用程序,用来承载Wcf服务。你会说什么叫承载?说白了就是可以访问到wcf服务,因为创建了一个wcf应用程序,就相当于一台机器人,但是不给他电池,他就没办法走路,承载就相当于给他动力,他就可以运行。wcf的承载方式可以分为自承载(Self Hosting) 和IIS承载(在IIS中 通过像访问web网站一样访问)。
  2. Contracts 项目是一个类库项目,他是用来存放wcf的契约,就是一些接口
  3. Services也是一个类库项目,他是用来存放实现了契约的服务,就是一些实现了接口的类
  4. WebClient 是一个web项目,采用的是MVC 4.用来作为调用wcf服务的客户端存在。
  5. WebHosting 是一个web项目,采用的是MVC4,用来作为承载wcf服务。可能你会说有两个承载wcf的项目,多余,是的,我在这里的目的就是为了说明,wcf可以有多种承载方式。

首先在Contracts 项目中添加一个接口,然后添加两个计算数值的方法。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.ServiceModel;
 6 namespace Chinaer.WcfDemo.Contracts
 7 {
 8     [ServiceContract(Name = "ICal", Namespace = "http://www.chinaer.com")]
 9     public interface ICal
10     {
11         [OperationContract]
12         int Add(int x, int y);
13
14         int Sub(int x, int y);
15     }
16 }

注意:在方法中Add上面有OperationContract 操作契约,但是在Sub方法上没有添加这个Attribute。

在服务类中实现这个契约,在Services中添加一个类,实现这个接口。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using Chinaer.WcfDemo.Contracts;
 6 namespace Chinaer.WcfDemo.Services
 7 {
 8     public class CalService : ICal
 9     {
10         public int Add(int x, int y)
11         {
12             return x + y;
13         }
14
15         public int Sub(int x, int y)
16         {
17             return x - y;
18         }
19     }
20 }

实现了服务类,下面就需要承载wcf服务,这个wcf相对比较简单,没有使用配置文件,通过编程方式来承载。当然我们一般在实际项目中不推荐这么做。

首先通过Console 控制台承载,其实控制台承载和Web承载的编程代码是一样的,只是项目类型不同而已。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.ServiceModel;
 6 using Chinaer.WcfDemo.Contracts;
 7 using System.ServiceModel.Description;
 8 namespace Chinaer.WcfDemo.ConsoleHosting
 9 {
10     class Program
11     {
12         static void Main(string[] args)
13         {
14             using (ServiceHost host = new ServiceHost(typeof(CalService), new Uri("http://127.0.0.1:8888")))
15             {
16                 //ServiceEndPoint 终结点 包含Address地址 Binding绑定 Contracts契约 简称ABC
17                 host.AddServiceEndpoint(typeof(ICal), new WSHttpBinding(), "calService");
18                 //添加服务终结点
19                 if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
20                 {
21                     //判断是否在配置文件中定义了元数据终结点
22                     ServiceMetadataBehavior metaData = new ServiceMetadataBehavior();
23                     metaData.HttpGetEnabled = true;
24                     metaData.HttpGetUrl = new Uri("http://127.0.0.1:8888/CalService/MetaData");
25                     host.Description.Behaviors.Add(metaData);//添加元数据终结点
26                 }
27                 host.Opened += delegate {
28
29                     Console.WriteLine("wcf服务已经启动 按任意键终止");
30                 };
31                 if (host.State != CommunicationState.Opened)
32                 {
33                     host.Open();
34                 }
35                 Console.Read();
36
37             }
38
39         }
40     }
41 }

添加了宿主以后就可以通过浏览器查看服务元数据。要查看元数据,首先要启动控制台程序。

在浏览器中输入服务元数据地址 就可以访问到元数据,如果代码正确可以看到如下结果。

出现了上面的元数据结果,就表示wcf是可以正常调用的。wcf服务是通过元数据的方式对外发布的,ServiceMedataBehavior是元数据发布的Behavior。

既然服务已经发布成功,那么我们就在客户端调用看是否可以得到结果。

可以看到调用wcf服务成功。我把在MVC中的一些简单处理介绍一下。

首先我在HomeController中添加了一个Add方法用来调用Wcf服务

1      public int Add(string first, string second)
2         {
3             CalService.CalClient client = new CalService.CalClient();
4             return client.Add(Convert.ToInt32(first), Convert.ToInt32(second));
5         }

首先就是创建了一个Wcf服务的客户端代理,以后细说,在前台通过jquery进行传值。

 1 $(function () {
 2         $("#btnAdd").click(function () {
 3             var first = $("#txtFirst").val();
 4             var second = $("#txtSecond").val();
 5             $.ajax({
 6                 url: '@Url.Action("Add", "Home")',
 7                 cache: false,
 8                 async: true,
 9                 data: "first=" + first + "&second=" + second,
10                 success: function (xhr, ts) {
11                     alert(xhr);
12
13                 },
14                 error: function (XMLHttpRequest, textStatus, errorThrown) {
15                     alert(textStatus);
16                 }
17
18
19             });
20
21
22         });
23
24
25     });

这样,我们的一个简单的访问wcf的程序就完成了。wcf的范围很广,以后我们一起来交流。

源码下载,项目文件大小超出了博客园的限制,所以我上传到了百度网盘,我分享链接,http://pan.baidu.com/share/link?shareid=458336&uk=1610729480

wcf 基础教程 第一讲 wcf基础知识相关推荐

  1. matlab基础教程第一讲,matlab基础第一讲

    (完整版)matlab第一讲教案_数学_高中教育_教育专区.西南科技大学本科生课程备课教案计算机技术在安全工程中的应用--Matlab 入门及应用授课教师:徐中慧 班级: 专业...... 2012 ...

  2. python环境变量的配置_python基础教程-第一讲-带你进入python的世界

    python是一门非常流行的语言,在前段时间网上流传的地产大佬潘石屹宣布要开始学习Python编程,这着实让python又火了一把,但确实反映出python的火热程度 .在2019年12月的世界编程语 ...

  3. 从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数)

    从零开始学习VIO笔记 --- 第一讲:基础知识(四元数,李代数) 一. 向量的内积与外积 二. 旋转与平移 2.1 旋转表示 --- 旋转矩阵R 2.2 平移向量 2.3 变换矩阵T与齐次坐标 2. ...

  4. 软考 程序员教程-第一章 计算机系统基础知识

    软考 程序员教程-第一章 计算机系统基础知识 为了督促自己学习,告别懒惰,在此先给自己定个小目标,请大家监督哟! 目标:一个月内过一遍<程序员教程>,下一个月开始上真题. 简单看了下,我在 ...

  5. 计算机基础的拼音是什么,第一讲计算机基础知识及微软拼音输入法

    第一讲计算机基础知识及微软拼音输入法 第一讲:计算机基础知识及微软拼音输入法 一. 背景知识 1. 硬件 8086-80286-80386-80486-奔腾(586)-P2-P3-P4: 2. 软件 ...

  6. 股票选股公式编写教程第一讲:公式编写的基础函数

    股票选股公式编写教程 第一讲:公式编写的基础函数 打开技术指标公式,我们最常见的,它的组成不外乎两种情况,一是 K线,二是均线.其他诸如柱状线,彩带,分段线等等,都是在 K线或均线基础上的延伸或变形. ...

  7. 计算机应用基础主要按键,计算机应用基础教案第一讲:键盘与鼠标(中职教育)...

    计算机应用基础教案第一讲:键盘与鼠标(中职教育) (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机应用基础教案第一讲:键盘与鼠标课 ...

  8. excel工具栏隐藏了怎么办_Office2016基础教程第一章:认识Excel #excel #职场 #办公技巧...

    今日详讲Excel基础 教程 第一章:认识Excel 1. 版本兼容性 2. Excel2016的独特之处 3. 安装Excel2016 4. 启动Excel2016 5. 退出Excel2016 6 ...

  9. Unity3D逆向基础教程第一课

    课程名称:Unity3D逆向基础教程第一课 课程类型:Unity3D 课程内容: 1.unity逆向环境搭建 2.unity文件介绍 3.reflector工具使用 课程时长:25分钟 课程作者:Sa ...

最新文章

  1. axure中怎么做出固定首行_Excel:固定表头的方法
  2. Java中文字符所占的字节数
  3. Ride to Office(信息学奥赛一本通-T1227)
  4. php随笔11-Thinkphp常用系统配置大全
  5. redis内存知识点
  6. 完美数c语言程序_C中的完美数
  7. DXF解析CAD图形解析PLT格式文件解析C#工程源码
  8. 山大计算机学院教务处,山东大学本科生院教务系统
  9. 网工常用网络命令合集✨(建议收藏)
  10. 夏雨老师:告诉你初学习平面设计需要什么条件
  11. ffmpeg里转场transition
  12. 《C语言及程序设计》实践参考——n=a!+b!+c!
  13. OneNote快捷键大全
  14. linux服务器配置和管理,Linux服务器配置和管理:一般管理
  15. 谷歌智能眼镜回归,针对商业用户售价999美元
  16. 解密NFT区块链游戏和收藏品市场
  17. 游戏敏感词屏蔽词过滤
  18. 周经理写给公司 的一封信
  19. 关于Qt翻译在Vs编辑器上面出现乱码问题
  20. 黑阔主流攻防之不合理的cookie验证方式

热门文章

  1. Jenkins 插件安装方式全攻略
  2. Chrome 最小字体12px
  3. 前端拦截url参数xss攻击_闲庭信步聊前端 - 漫谈XSS
  4. Java Elasticsearch 使用
  5. Soul 网关源码阅读(二)代码初步运行
  6. Spring Boot Mybatis简单使用
  7. 参数调优为什么要采样_优化参数
  8. IDEA采用Debug模式无法启动项目,但是采用普通模式可以正常启动项目
  9. 离线在线计算机系统,离线计算机系统
  10. java进程因机器内存不足被系统kill的定位