WCF 基础加开发简介
http://www.cnblogs.com/myg2006/archive/2008/03/09/1097189.html
WCF --- Windows Communiction Foundation,是一个Microsoft推出已久的技术。已久有很多人写了不少关于WCF的文章,比如谈谈WCF系列等,都是很好的文章。我只是想说一些基础的东西,然后写一个例子,让目前刚开始学习WCF的人有一个感性的了解,希望能给他们的学习带来一点用处,同时是自己对WCF认识加深的一个过程。
WCF是一个统一的,可用于建立安全,可靠的面向服务的应用高效的开发平台。WCF是构建安全可靠的事务性服务的统一框架。它是一种构建分布式面向服务系统的非常丰富的技术基础,它统一了消息风格和RPC[Remote Procedure Call]风格,并且通过二进制和基于开放标准的通信达到了平台最优化。
它整合了.Net平台下所有的和分布式系统有关的技术,例如ASP.NET Web服务(ASMX)、增强Web服务扩展(WSE)、.Net Remoting、企业服务(Enterprise Service)和微软消息队列(MSMQ)。
而要理解WCF,你首先要理解WCF基本的组成部分,分别为:
- Message --- Soap Message, WCF不仅支持XML格式,而且还支持更加高效的Binary格式
- Header --- Message的Header,通常是附属信息,可以零个或多个
- Body --- Message的Body,通常是主题信息,可以零个或多个
- Channel --- 传输Message的通常,可以建立多个Channel,通常包括下面四部分信息,但一般不用我们指定,而是在配置Service/Endpoint中指定
- Security --- 传输安全性
- Message Securty --- Message的安全性,通常验证方式有Windows Authentication 或 X.509 或 Custom
- Authentication --- 验证
- Integrity --- 消息完整性
- Confidentiality --- 消息机密性,加密解密
- Auditing --- 审核
- Transport Security --- Transport的安全性
- Https --- 针对Http来说的安全传输
- Other
- Message Securty --- Message的安全性,通常验证方式有Windows Authentication 或 X.509 或 Custom
- Interoperability --- 交互性,我的理解是,可以替代的服务类型
- WebService
- WSE
- .Net Remoting
- Enterprise Service
- MSMQ
- Other
- Message pattern --- Message的传输方式
- Simplex --- 单向传输,如A-->B
- Duplex --- 双向传输,如A<---->B,A先发送信息到B,B返回一个状态,然后A再发Message,然后B Response
- Request-Respose --- 要求/回复,A-->B,B-->A
- Transport --- 传输类型,Message是通过什么形式传输的
- Http --- 无需保存连接状态
- Tcp --- 需要保存连接状态,在Exchange Data的时候,会维护一个State
- MSMQ --- 通常用于需要可靠的Message传输的时候
- Named Pipes --- 通常用于单个PC的不同进程间通信
- Security --- 传输安全性
- Service
- Service
- Contract --- 契约
- Data Contract --- 数据契约,告诉程序该数据可以用于WCF传输,通常用来指定我们自定义的Model对象,是serializable的一种类型,命名空间为System.Runtime.Serialize。
- Service Contract --- 服务契约,告诉程序这是该一个WCF服务
- Operation Contract --- 操作契约,告诉程序,这是该Service对外暴露的可以执行的操作
- Implementation --- Operation Contract的具体实现
- Contract --- 契约
- Endpoint --- 在外界看来,服务的连接接地址
- Behavior --- Service在执行时,要执行的一个行为,比如安全验证
- Throttling --- 决定同一时间一个Service可以使用的Thread数量、Service的实例数,传递的Message数量
- Security --- 决定Service的安全特性
- Instancing --- 决定Service实现类的可以创建的实例数
- PerCall --- 客户端的每次Request都会产生一个InstanceContext
- PerSession --- 根据每个客户端的Session来产生一个InstanceContext,并且和这个Session有相同的生命周期
- Single --- 单例模式
- Error Handling --- 但Service遇到异常并且需要返回信息时的处理方式
- Concurrency --- 控制一个InstanceContext可以跨多少个线程
- Multiple --- 可以跨多个线程
- Single --- 只能在单行程内执行
- Reentrant --- Each instance of the service can only process messages one at a time but can accept re-entrant operation calls
- Transactions --- 决定Service是否可以接受并执行来自客户端的事务.注意事务是客户端创建的,因此事务的完成与否由客户端决定,当然生命周期也是如此。
- Custom --- 自定义行为
- Host --- WCF的寄宿主,即运行Service的地方
- Console Application
- Web Application
- WinForms Application
- IIS
- Service
- Service
下面我做一个简单实例来说明一下,一个WCF的开发,调用过程。
一,首先我们创建一个Console Application,叫做WCFDemo
二,我们既然要开发WCF,当然要引入一个WCF Service Application了,叫做Service,如果你不想创建单独的项目,你可以在别的项目中添加WCF Service的Item。在创建WCF Project的时候会自动生成IService和Service.svc,通常IService这个Service Contract我们是不会要的,因为调用Service的Client也需要用,所以我们会把他们放到统一的地方,本例中是叫Interface的项 目。单纯的Service.svc是很简单的一个实现了IService接口的一个类,没有什么特别之处,
1: namespace Service
2: {
3: // NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config and in the associated .svc file.
4: public class Service : IService
5: {
6: public Computer GetComputer()
7: {
8: Computer computer = new Computer();
9: computer.ComputerName = "Ralax - PC";
10: return computer;
11: }
12: }
13: }
ServiceClient完成后,就是Client的调用了,如下:
1: namespace WCFDemo
2: {
3: class Program
4: {
5: static void Main(string[] args)
6: {
7: using(ServiceClient sClient = GetService())
8: {
9: Console.WriteLine(sClient.GetComputer().ComputerName);
10: Console.Read();
11: }
12: }
13:
14: public ServiceClient GetService()
15: {
16: WSHttpBinding binding = new WSHttpBinding();
17: EndpointAddress address = new EndpointAddress(new Uri("http://localhost/WCFDemo/Service.svc"));
18: ServiceClient client = new ServiceClient(binding, address);
19: return client;
20: }
21: }
22: }
这个例子,我已经打包了,可以在这里下载:https://files.cnblogs.com/myg2006/WCFDemo.rar