首页 > 代码库 > 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初步认识