WCF 基础介绍

1. 概念:

  WCF(Windows Communication Foundation):一个用于创建和运行分布式系统的技术集合,使用它能创建安全的、可靠的、跨平台的分布式解决方案。它的面向服务的编程模型整合了.Net平台下以往全部的分布式开发技术,例如.Net Remoting,Asp.Net Xml Web Service,MSMQ,WSE,和Enterprise Service等,它可以支持跨应用程序域,进程,网络的进行数据通讯,而且能寄宿在诸如IIS,Windows Service,Console,Windows Application等多种宿主中。

2. 组成:

  • Contracts:类库项目,定义服务契约,应用System.ServiceMode程序集;
  • Services:  类库项目,提供WCF服务的实现。该项目中的所有WCF服务实现了定义在Contracts中相应的服务契约,所以Services具有对Contracts项目的引用;
  • Hosting:   控制台程序或其他应用程序,实现对定义在Services项目中的服务的寄宿,该项目需引用Contracts和Services两个项目和System.ServiceMode程序集;
  • Client:      控制台或其他应用程序模拟服务的客户端,该项目引用System.ServiceMode程序集。

3. 契约类型

  服务契约、数据契约、消息契约和错误契约

4. WCF技术优势

  常用的分布式技术有COM+、.NET远程技术(Remoting)、Web Service和微软消息队列服务,WCF技术将这些分布式技术整合为一个高效的API。常用的那些分布式技术只能解决项目开发中某个方面的问题,并且不同技术对平台要求不同。在项目中有时要使用到多种技术从而导致这些技术所提供的服务有重叠之处,并且整个项目的维护复杂性大大增加。WCF技术提供了一个完整统一的方案解决这些问题,它提供了一个用于访问各种分布式技术的通用API,并且增加了很多必要的服务。

5. 建立WCF程序

  • 创建服务:由地址、契约、绑定三部分组成。
    a.编写契约:其实是一个接口。
    namespace WCFService
    {    
        [ServiceContract]
        public interface IService
        {
            [OperationContract]
            string DoSomething();
        }
    }
    b.编写服务类型:是契约的实现。
    namespace WCFService
    {   
        public class Service : IService
        {
            public string DoSomething()
            {
                return "This is my first WCF Project!";
            }
        }
    }  
  • 创建宿主
    a.添加引用: System.ServiceMode和WCF的服务WCFService
    b.添加配置文件
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <services>
          <service name="WCFService.Service" behaviorConfiguration="ServiceBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8001/Services/" />
              </baseAddresses>
            </host>
            <endpoint address="Service" binding="basicHttpBinding"
             contract="WcfService.IService"  />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="ServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    c.编写宿主
    using System.ServiceModel;
    
    namespace ServiceHost
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (ServiceHost host=new ServiceHost(typeof(WCFService.Service)))
                {
                    host.Open();
                    Console.WriteLine("WCF Services start!");
                    Console.ReadKey();
                    host.Close();
                }
            }
        }
    }  
  • 编写客户端
    a.添加服务引用
    b.编写客户端代码
    namespace UserClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (WCFServices.ServiceClient client = new WCFServices.ServiceClient())
                {
                    string result = client.GetData();
                    Console.WriteLine("WCF Result!");
                    Console.ReadKey();
                }
            }
        }
    }  
  • 启动宿主,运行客户端程序。
     

 

 

引自:http://www.cnblogs.com/artech/archive/2007/09/15/893838.html
参考:http://www.cnblogs.com/iamlilinfeng/category/415833.html

 

原文地址:https://www.cnblogs.com/raysbo/p/1370447.html