WCF 之旅——1
2007-12-25 22:24 Jun1st 阅读(2449) 评论(12) 编辑 收藏 举报1.什么是WCF?
根据微软官方的解释,WCF(之前的版本名为“Indigo”)是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案,且能与已有系统兼容协作。WCF是微软分布式应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。
WCF是微软重点介绍的产品,因此也推出了专门的官方网站(http://windowscommunication.net),该网站有最新的WCF新闻发布,以及介绍WCF的技术文档和样例代码。
2. WCF的ABC
每一篇入门性质的介绍WCF的文章,都会提到ABC:Address, Binding, Contract。
- Address: 每一个WCF的Service都有一个唯一的地址。这个地址给出了Service的地址和传输协议(Transport Protocol)
- Binding: 通信(Communication)的方式很多,同步的request/reply模式,非同步的fire-and-forget模式。消息可以单向或者双向的发送接收,可以立即发送或者把它放入到某一个队列中再处理。所供选择的传输协议也有Http, Tcp,P2P, IPC等。当要考虑Client/Server如何进行通讯的时候,除了考虑以上提到的几点之外,还有其它很多需要考虑的因素,如安全,性能等。因此,简单来说,Binding只不过是微软提供的一组考虑比较周全、常用的封装好的通信方式。
- Contract:Contract描述了Service能提供的各种服务。Contract有四种,包括Service Contract, Data Contract, Fault Contract和Message Contract
3. Endpoint
每一个Service都需要具备ABC三个元素,而WCF把这三者之间的关系规范化为Endpoint.
4. 简单的例子
每一个Service都需要有一个host。这个host的形式可以是多种多样,可以是WinForm Application, Console Application,也可以IIS,或者是WAS(Vista),Windows Service等。
首先,来定义Service的Contract.
[ServiceContract] public interface IHelloService { [OperationContract] void SayHello(); [OperationContract] string SayHelloToEmployee(Employee employee); // TODO: Add your service operations here } // Use a data contract as illustrated in the sample below to add composite types to service operations [DataContract] public class Employee { private string firstName; private string lastName; [DataMember] public string FirstName { get { return firstName; } set { firstName = value; } } [DataMember] public string LastName { get { return lastName; } set { lastName = value; } } }
在定义好了Service Contract和Data Contract之后,还需要定义另外两个元素,Address和Binding。这两者都可以通过编程和配置文件来控制。这里就用配置文件的方式了,把这些代码写入host程序(Console)的App.config文件中:
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="Default" > <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> <services> <service name="HelloServiceLibrary.HelloService" behaviorConfiguration="Default"> <host> <baseAddresses> <add baseAddress="http://localhost/HelloService"/> </baseAddresses> </host> <endpoint address="net.tcp://localhost/HelloService01" binding="netTcpBinding" bindingConfiguration="" contract="HelloServiceLibrary.IHelloService" /> <endpoint address="" binding="wsHttpBinding" contract="HelloServiceLibrary.IHelloService" ></endpoint> </service> </services> </system.serviceModel> </configuration>
再通过Servicehost提供的方法Open(),就可以启动Service了。
Client端要调用Service,都需要通过Proxy来完成,Proxy可以用VS2005或者Windows SDK提供的工具SvcUtil来完成。
写的不好,请大家包涵,轻拍
不知道如何添加附件,要源代码的请留下email