WCF学习笔记(第一天,1.WCF概述)
公司.NET项目要转型用java 开发,我有两种选择,一是转java开发留在公司,二就是继续跟着微软的技术路线走,再找工作。我当然选择了后者,所以,我又要开始艰辛漫漫的求职生涯路……
进入正题:这里记录的是我在微软论坛里面的学习后整理的笔记。我只是做了归纳整理。方便以后随时学习、查阅。也希望能帮到更多的人尽快了解和学习WC地址是:http://social.msdn.microsoft.com/Forums/zh-CN/wcfzhchs/thread/726449e8-74af-45f8-987f-8f367f0d8968 <<跟我一起从零开始学WCF系列课程>>需要的朋友可以直接下载徐长龙讲师的教学视频、源代码以及PDF文档。大家一起学习进步。
收听本次课程需具备的条件:
1.熟悉Web Service 编程
2.熟悉Visual Studio 2005/2008
3.熟悉分布式应用开发
本次课程的内容包括:1.什么是WCF 2.WCF背景介绍
没有WCF的时候,用传统方法解决分布式开发:
互操作性:(与互联网中,或基于J2EE的预定应用程序进行通行)ASMX 、ASP.NET webservers (局域网中.NET到.NET的通信而设计).NET Remoting
安全性:wse:1.0,2.0,3.0 (wse可以和ASMX一起使用,wse 是为了提高webservers的安全性而推出的webservers加强版)
事务性:com+ 解决网络的事务之间的操作。消息队列,MSMQ:消息发送机制(MSMQ是间歇式连接应用程序的最佳解决方案)
由于建立在.NET Framework 之上,大型分布式应用程序必须使用这些通信技术中的多种技术才能满足其要求。尽管这在技术上是可行的,但最终的应用程序实 现起来将会很复杂,而且维护起来也很困难。
WCF 就是针对这种繁杂却又切实存在的情况而设计的,是公开和访问服务的Windos应用程序的首选技术
1.什么是WCF?
提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。
将Web 服务的概念直接映射到.NET Framework 公共语言运行库(CLR) 中的对应内容,包括将消息灵活且可扩展地映射到用诸如Visual C# 或Visual Basic 等 语言实现的服务。该服务模型提供支持松散耦合和版本管理的序列化功能,并提供与诸如消息队列(MSMQ)、COM+、ASP.NET Web 服务、Web 服务增强(WSE)等现有 .NETFramework 分布式系统技术以及很多其他功能的集成和互操作性。
WCF的编程特点:1.全新的Web Serverce 界面 2.属性话编程
初入门级代码:
1 //定义IHelloService服务的协定 2 [ServiceContract] //表示一个服务的协定、合同,这个属性修饰接口,使这个接口成为WCF服务的接口 3 Public interface IHelloService 4 { 5 [OperationContract] //WCF服务的方法 6 string Hello(); 7 } 8 public class HelloService : IHelloService 9 { 10 public string Hello () 11 { 12 return “Hello”; 13 } 14 }
演示:创建一个WCF服务
查看WcfServiceLibrary1属性,发现WcfServiceLibrary1就是一个类库,和以往的windows类库没有区别,最大的区别在于App.config的一系列的配置。这个配置里面指示了WCF一系列方面的行为和设置。
生成IService1.cs 和Service1.cs
1 IService1.cs : 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Runtime.Serialization; 6 using System.ServiceModel; 7 using System.Text; 8 9 namespace WcfServiceLibrary1 10 { 11 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 12 [ServiceContract] 13 public interface IService1 14 { 15 [OperationContract] 16 string GetData(int value); 17 18 [OperationContract] 19 CompositeType GetDataUsingDataContract(CompositeType composite); 20 21 // TODO: 在此添加您的服务操作 22 } 23 24 // 使用下面示例中说明的数据协定将复合类型添加到服务操作 25 [DataContract] 26 public class CompositeType 27 { 28 bool boolValue = true; 29 string stringValue = "Hello "; 30 31 [DataMember] 32 public bool BoolValue 33 { 34 get { return boolValue; } 35 set { boolValue = value; } 36 } 37 38 [DataMember] 39 public string StringValue 40 { 41 get { return stringValue; } 42 set { stringValue = value; } 43 } 44 } 45 }
1 Service1.cs: 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Runtime.Serialization; 6 using System.ServiceModel; 7 using System.Text; 8 9 namespace WcfServiceLibrary1 10 { 11 // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。 12 public class Service1 : IService1 13 { 14 public string GetData(int value) 15 { 16 return string.Format("You entered: {0}", value); 17 } 18 19 public CompositeType GetDataUsingDataContract(CompositeType composite) 20 { 21 if (composite == null) 22 { 23 throw new ArgumentNullException("composite"); 24 } 25 if (composite.BoolValue) 26 { 27 composite.StringValue += "Suffix"; 28 } 29 return composite; 30 } 31 } 32 }
立即就可以运行以上代码。在“请求”的getData方法中输入参数6,可以看到“响应”中的值显示:"You entered: 6"
在“请求”GetDataUsingDataContract方法中选择参数true,输入参数a,可以看到响应中的值显示:"aSuffix"如果选择false,响应中的值则为"a"
创建窗体应用程序测试WCF服务程序。并且添加服务引用。
窗体中添加button按钮,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 10 namespace WindowsFormsApplication1 11 { 12 public partial class Form1 : Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 } 18 19 private void button1_Click(object sender, EventArgs e) 20 { 21 //ServiceReference1.Service1Client sc = new WindowsFormsApplication1.ServiceReference1.Service1Client(); 22 ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client(); 23 MessageBox.Show(sc.GetData(5)); 24 25 26 27 ServiceReference1.CompositeType ct = new WindowsFormsApplication1.ServiceReference1.CompositeType(); 28 ct.BoolValue = true; 29 ct.StringValue = "Hello,WCF "; 30 31 ServiceReference1.CompositeType newct = new ServiceReference1.CompositeType(); 32 newct = sc.GetDataUsingDataContract(ct); 33 MessageBox.Show(newct.StringValue); 34 } 35 } 36 }
运行结果: