wcf 基础教程 第一讲 wcf基础知识
2013-03-15 23:23
302 查看
最近工作有点忙,感觉有点累啊,很久没有更新博客了,看到自己的博客访问量日渐下降,我于心不忍,决定还是重新开博来吸引大家的关注。这次要说的不是别的,正是大名鼎鼎的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的项目。我们按照在项目中会实际用到的项目结构来组织。
我来解释一下这些项目的结构。
ConsoleHosting 是一个控制台应用程序,用来承载Wcf服务。你会说什么叫承载?说白了就是可以访问到wcf服务,因为创建了一个wcf应用程序,就相当于一台机器人,但是不给他电池,他就没办法走路,承载就相当于给他动力,他就可以运行。wcf的承载方式可以分为自承载(Self Hosting) 和IIS承载(在IIS中 通过像访问web网站一样访问)。
Contracts 项目是一个类库项目,他是用来存放wcf的契约,就是一些接口
Services也是一个类库项目,他是用来存放实现了契约的服务,就是一些实现了接口的类
WebClient 是一个web项目,采用的是MVC 4.用来作为调用wcf服务的客户端存在。
WebHosting 是一个web项目,采用的是MVC4,用来作为承载wcf服务。可能你会说有两个承载wcf的项目,多余,是的,我在这里的目的就是为了说明,wcf可以有多种承载方式。
首先在Contracts 项目中添加一个接口,然后添加两个计算数值的方法。
注意:在方法中Add上面有OperationContract 操作契约,但是在Sub方法上没有添加这个Attribute。
在服务类中实现这个契约,在Services中添加一个类,实现这个接口。
实现了服务类,下面就需要承载wcf服务,这个wcf相对比较简单,没有使用配置文件,通过编程方式来承载。当然我们一般在实际项目中不推荐这么做。
首先通过Console 控制台承载,其实控制台承载和Web承载的编程代码是一样的,只是项目类型不同而已。
添加了宿主以后就可以通过浏览器查看服务元数据。要查看元数据,首先要启动控制台程序。
在浏览器中输入服务元数据地址 就可以访问到元数据,如果代码正确可以看到如下结果。
出现了上面的元数据结果,就表示wcf是可以正常调用的。wcf服务是通过元数据的方式对外发布的,ServiceMedataBehavior是元数据发布的Behavior。
既然服务已经发布成功,那么我们就在客户端调用看是否可以得到结果。
可以看到调用wcf服务成功。我把在MVC中的一些简单处理介绍一下。
首先我在HomeController中添加了一个Add方法用来调用Wcf服务
首先就是创建了一个Wcf服务的客户端代理,以后细说,在前台通过jquery进行传值。
这样,我们的一个简单的访问wcf的程序就完成了。wcf的范围很广,以后我们一起来交流。
源码下载,项目文件大小超出了博客园的限制,所以我上传到了百度网盘,我分享链接,http://pan.baidu.com/share/link?shareid=458336&uk=1610729480
既然是基础,那我们就来了解一下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的项目。我们按照在项目中会实际用到的项目结构来组织。
我来解释一下这些项目的结构。
ConsoleHosting 是一个控制台应用程序,用来承载Wcf服务。你会说什么叫承载?说白了就是可以访问到wcf服务,因为创建了一个wcf应用程序,就相当于一台机器人,但是不给他电池,他就没办法走路,承载就相当于给他动力,他就可以运行。wcf的承载方式可以分为自承载(Self Hosting) 和IIS承载(在IIS中 通过像访问web网站一样访问)。
Contracts 项目是一个类库项目,他是用来存放wcf的契约,就是一些接口
Services也是一个类库项目,他是用来存放实现了契约的服务,就是一些实现了接口的类
WebClient 是一个web项目,采用的是MVC 4.用来作为调用wcf服务的客户端存在。
WebHosting 是一个web项目,采用的是MVC4,用来作为承载wcf服务。可能你会说有两个承载wcf的项目,多余,是的,我在这里的目的就是为了说明,wcf可以有多种承载方式。
首先在Contracts 项目中添加一个接口,然后添加两个计算数值的方法。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace Chinaer.WcfDemo.Contracts { [ServiceContract(Name = "ICal", Namespace = "http://www.chinaer.com")] public interface ICal { [OperationContract] int Add(int x, int y); int Sub(int x, int y); } }
注意:在方法中Add上面有OperationContract 操作契约,但是在Sub方法上没有添加这个Attribute。
在服务类中实现这个契约,在Services中添加一个类,实现这个接口。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Chinaer.WcfDemo.Contracts; namespace Chinaer.WcfDemo.Services { public class CalService : ICal { public int Add(int x, int y) { return x + y; } public int Sub(int x, int y) { return x - y; } } }
实现了服务类,下面就需要承载wcf服务,这个wcf相对比较简单,没有使用配置文件,通过编程方式来承载。当然我们一般在实际项目中不推荐这么做。
首先通过Console 控制台承载,其实控制台承载和Web承载的编程代码是一样的,只是项目类型不同而已。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using Chinaer.WcfDemo.Contracts; using System.ServiceModel.Description; namespace Chinaer.WcfDemo.ConsoleHosting { class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(CalService), new Uri("http://127.0.0.1:8888"))) { //ServiceEndPoint 终结点 包含Address地址 Binding绑定 Contracts契约 简称ABC host.AddServiceEndpoint(typeof(ICal), new WSHttpBinding(), "calService"); //添加服务终结点 if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) { //判断是否在配置文件中定义了元数据终结点 ServiceMetadataBehavior metaData = new ServiceMetadataBehavior(); metaData.HttpGetEnabled = true; metaData.HttpGetUrl = new Uri("http://127.0.0.1:8888/CalService/MetaData"); host.Description.Behaviors.Add(metaData);//添加元数据终结点 } host.Opened += delegate { Console.WriteLine("wcf服务已经启动 按任意键终止"); }; if (host.State != CommunicationState.Opened) { host.Open(); } Console.Read(); } } } }
添加了宿主以后就可以通过浏览器查看服务元数据。要查看元数据,首先要启动控制台程序。
在浏览器中输入服务元数据地址 就可以访问到元数据,如果代码正确可以看到如下结果。
出现了上面的元数据结果,就表示wcf是可以正常调用的。wcf服务是通过元数据的方式对外发布的,ServiceMedataBehavior是元数据发布的Behavior。
既然服务已经发布成功,那么我们就在客户端调用看是否可以得到结果。
可以看到调用wcf服务成功。我把在MVC中的一些简单处理介绍一下。
首先我在HomeController中添加了一个Add方法用来调用Wcf服务
public int Add(string first, string second) { CalService.CalClient client = new CalService.CalClient(); return client.Add(Convert.ToInt32(first), Convert.ToInt32(second)); }
首先就是创建了一个Wcf服务的客户端代理,以后细说,在前台通过jquery进行传值。
$(function () { $("#btnAdd").click(function () { var first = $("#txtFirst").val(); var second = $("#txtSecond").val(); $.ajax({ url: '@Url.Action("Add", "Home")', cache: false, async: true, data: "first=" + first + "&second=" + second, success: function (xhr, ts) { alert(xhr); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); }); });
这样,我们的一个简单的访问wcf的程序就完成了。wcf的范围很广,以后我们一起来交流。
源码下载,项目文件大小超出了博客园的限制,所以我上传到了百度网盘,我分享链接,http://pan.baidu.com/share/link?shareid=458336&uk=1610729480
相关文章推荐
- wcf 基础教程 第一讲 wcf基础知识 在IIS中承载wcf服务
- wcf 基础教程 第一讲 wcf基础知识
- WCF入门教程:WCF基础知识
- WCF入门教程:WCF基础知识问与答(转)
- WCF入门教程:WCF基础知识问与答(转)
- WCF入门教程:WCF基础知识问与答
- WCF入门教程:WCF基础知识问与答(转)
- 【Python基础教程第2版】——第一讲:基础知识
- WCF入门教程:WCF基础知识问与答(转)
- WCF入门教程:WCF基础知识问与答(转)
- Android四大组件简介:Android 基础知识,开发教程
- Daydream VR入门基础教程,VR开发基础知识——VR view基本介绍
- Java中的数组基础知识学习教程
- Java的Socket网络编程基础知识入门教程
- Python基础教程之第1章 基础知识
- AVS基础知识教程
- Win32教程33-RichEdit控件.基础知识
- ArcGIS教程:3D Analyst基础知识
- ArcGIS教程:有关修改图表的基础知识
- php教程|php基础知识