首页 > 代码库 > WCF初步认识

WCF初步认识

    

    最近学习了一个新的知识点,那就是WCF。


一.SOA架构介绍


    在认识WCF之前,我们先来了解一下SOA,全称是面向服务架构(Service Oriented Architecture),是一种组件架构模型。面向服务可能我们都还不太熟悉,但是组件我们都是知道的,我理解的组件就是对数据或方法的简单封装,如果系统有需要直接拿来用可以了,不用再花费功夫去重新编写,SOA就是基于这样的思想,它可以根据需求对松散耦合的组件进行分布式部署、组合和使用。


二.WCF初步认识


    了解完了SOA,再来看WCF,它的全称是:Windows Communication Foundation,可以翻译为Windows通讯开发平台,是微软公司推出的符合SOA思想的技术框架。它的功能很丰富,我们记住一点就可以了,那就是WCF统一了微软公司之前推出的分布式技术,使分布式变得简单。


三.WCF的体系架构

    

    服务端部分:


    刚开始接触到上面四个概念时,感觉分官方,不好理解,下面通过一个例子介绍一下上面的基础概念。


    1.在VS上建立一个空白的解决方案,然后新建一个项目,类型为:WCF服务应用程序。建好后如下图显示:

    


    2.删除自带的IService1.cs和Service1,添加服务文件User.svc,这是系统会自动WCF接口文件IUser.cs.然后在IUser中定义WCF方法,在User.svc对接口方法进行实现。这样第一个WCF服务程序就建好了。

    

namespace WcfService
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IUser”。
    [ServiceContract]//说明接口是一个WCF接口
    public interface IUser
    {
        [OperationContract]//说明该方法是一个WCF方法
       
        //定义ShowName方法
        string ShowName(string name);
    }
}
    public class User : IUser
    {    
        //对接口方法进行实现
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}",name);
            return wcfName;
        }
    }


解释:


    ·契约:我们定义的IUser接口就是契约的一个体现了,它属于公共服务接口的一部分,它描述了IUser这个方法的功能和作用,让我们知道这个方法是"干什么"的。


    ·服务运行时:除了IUser接口外,我们还可以为User类定义很多其他行为,来描述这个类运行时的具体行为,服务运行时在一定程度上描述了服务是"怎么干"的。


    ·消息:WCF程序和外部交互的数据信息。


    ·寄宿:如果把WCF比作一个应用软件的话,那么宿主就相当于系统软件(比如操作系统),应用软件必须在操作系统的基础上才能够使用.寄宿就是WCF程序的部署方式,一个WCF服务需要在一个可运行的程序中寄宿,我们可以把宿主理解为WCF运行的容器,比较常见的是IIS。

    

    3.服务端建好后,在IIS上发布一下,和普通的程序法不一样,这里就不再赘述了。图中的http://localhost:3090/User.svc?wsdl即为我们要引用的服务地址。

    

        

    客户端部分:


    我们这里以Web应用程序为例,创建ASP.NET Web应用程序的项目。命名为:WCFClient,并添加UserTest.aspx如下图所示:

    


    4.添加在第②步中部署的服务的引用,命名空间为WcfService,然后转到,找到服务引用后,单击确定。我们再次查看解决方案,里面多了Service References的文件夹。

    


    5.配置UserTest.aspx的方法,使其可以使用服务端的方法。

    

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WcfClient.aspx.cs" Inherits="WCFClient.WcfClient" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
    <asp:Button ID="btnSubmit" runat="server" Text="测试WCF服务" OnClick="btnSubmit_Click" />
    </div>
    </form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WCFClient.WcfService;//导入WCF服务的名称空间

namespace WCFClient
{
    public partial class WcfClient : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            UserClient user = new UserClient();
            string result = user.ShowName(this.txtName.Text);
            Response.Write(result);
        }
    }
}

    上面中的UserClient类是在添加引用的时候生成的服务端User类的客户端代理类,一般客户端代理类名称都会是**Client。下面看下运行的效果吧:

    


    总结:刚接触WCF感觉有些无从下手,在网上找到一些相关资料后动手敲了个例子,还是感觉实践的效果要好些,关在那里看理论是无论如何也搞不明白的。期待以后的进一步学习。

    




WCF初步认识