首页 | 新闻 | 网站建设 | 成功案例 | 服务项目 | 商业购买 | 编程技术 | 壁纸 | 休闲娱乐 | 下载专区 | 留言 | 论坛
 
您现在的位置:网站首页 > 编程技术 > 软件架构与项目管理
WCF
发布时间:2008-02-13  发布:奇景  关键字:  阅读次数:178  【字号

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.

                    image

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来完成。

【收藏此页】【复制网址】【打印】【关闭】返回上一级
 ≡相关主题≡
 
分类导航
本类最新
本周热门

  版权声明 | 关于本站 | 常见问题 | 联系我们 | 网站管理 | 页面顶端
CopyRight ? QScms.cn All Rights Reserved 福州帝威荣信息技术有限公司研发 业务联系:0591-87522535
互联网许可证:闽ICP备08002627号 QQ:812188106 邮箱:qscms@yahoo.cn
Power By QsCMS V3.0  执行时间 : 0.016 秒 页面装载: