WCF 创设WCF

一、概述

1.原型格局:使用原型实例指定创建对象的体系,并由此复制这些原型创制新的靶子。

  Windows Communication
Foundation(WCF)是由微软腾飞的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。由
.NET Framework 3.0 先河引入。

利用情状:

1.亟待创立的目标应独立于其系列与成立情势。
2.要实例化的类实在运行时控制的。
3.不想要与制品层次相对应的工厂层次。
4.不同类的实例间的差别仅是气象的多少组成。因而复制相应数额的原型比手工实例化更加有益。
5.类不易于创建,不如每个组件可以把任何零件作为子节点的组合对象。复制已有的组合对象并对副本进行修改会越来越便于。

  WCF的最终目的是透过进程或不同的连串、通过本地网络或是通过Internet收发客户和服务期间的新闻。

2.厂子格局:定义创立对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。

  WCF合并了Web服务、.net Remoting、信息队列和Enterprise
瑟维斯(Service)s的效益并集成在Visual Studio中。

动用情状:

1.编译时无法精确预期要创制的对象的类。
2.类想要其子类决定在运作时成立什么。
3.类有几多相助类为其子类,而你想将回来哪个子类这一音信局部化。

  WCF专门用于面向服务支付。

3.架空工厂:提供一个创立一名目繁多相关或相互依赖对象的接口,而无须指定他们切实的类。

二、基于Asp.net 的应用程序开发与面向服务支出

空泛工厂相比较工厂方法:

1.空洞工厂通过对象组合创立抽象产品;创制多体系产品;必须修改父类的接口才能帮忙新的产品。
2.厂子方法通过类继承创造抽象产品;成立一种产品;自泪花成立者不分轩轾载工厂方法以创办新产品。

图片 1

4.建造者形式:将一个错综复杂对象的构建与它的突显分离,使得同一的构建过程可以成立不同的显示。

  在依照Asp.net
的应用程序开发中,我们由客户机的浏览器访问应用程序服务器,然后经过应用程序服务器中的数据库连接去老是数据库服务器,读取或是操作数据,有时候可能会多一个文本服务器。大家可以观测到,基本上所有的利用都置身了一台服务器上,但对此一个,由于事务上的内需(如:与外部系统相互),一台服务器很难支撑具有的行使。大家再看下面的图:

使用情形:

1.急需创造涉及各类总部件的扑朔迷离对象。创设对象的算法应该单独于部件的装配模式。常见例子是构建组合对象。
2.构建过程需要以不同的措施构建对象。

图片 2

5.单例形式:保证一个类仅有一个实例,并提供一个做客他的全局访问点。

  客户机使用浏览器访问服务器A,服务器A为了工作需要与任何各类应用部署在劳动器B、C、D….再通过WCF技术并行通信,相互访问…可是面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可相互性..由于本文不是介绍SOA的篇章,感兴趣的校友可以瞻仰:SOA

使用意况:

1.类智能有一个实例,而且必须从一个为人精通的访问点对其展开走访,比如工厂方法。
2.那多少个唯一的实例只能通过自泪花举行扩大,而且扩张的目的不会毁掉客户端代码。

三、第一个WCF程序

6.适配器情势:将一个类的接口转换成客户愿意的此外一个接口,适配器模式使得本来由于接口不匹配而无法一起坐班的那么些类可以一起干活。

  1.
新确立空白解决方案,并在缓解方案中新建项目,项目系列为:WCF服务应用程序。建立完成后如下图所示:

运用情状:

1.已有类的接口与需求不配合。
2.想要一个可复用的类,该类可以同可能包含不匹配接口的另外类合作。
3.亟待适配一个类的多少个例外子类,可以让没一个子类去子类化一个类适配器又不现实。这个可以动用对象适配器(也叫委托)来适配其父类的接口。

图片 3

7.桥接形式:将抽象部分与它的贯彻部分分离,使她们都足以独立的成形。

  2.去除系统生成的六个文本I瑟维斯(Service)1.cs与Service1.svc。

采用情状:

1.不想在抽象与其促成之间形成固定的绑定关系(这样就能在运转时切换实现)。
2.空洞及其实现都应可以经过子类化独立举行扩大。
3.对抽象的落实举办改动不应影响客户端代码。
4.假若每个实现需要额外的子类以细化抽象,则表明又还要把她们分成几个部分。
5.想在富含不同抽象接口的六个对象期间共享一个落实。####8.外观情势:为系统中的一组接口提供一个联合的接口,外观定义一个高层接口,让子系统更便于使用。

  3.添加自定义的WCF【服务文件】User.svc,此时vs2010会自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs对该接口的不二法门举行落实。

利用情形:

1.子系统正日趋变得复杂。应用情势的过程中衍变出许多类。能够动用外观这么些子系统类提供一个较简单的接口。
2.得以应用外观对子系统举办分层。每个子系统级别有一个外观作为入口点。让它们经过其外观举行通信,可以简化它们的看重关系。

代码如下:

9.中介者情势:用一个对象来封装一层层对象的交互模式。中介者使各目的不需要展示地相互引用,从而使其耦合松散,而且可以独立地改成它们中间的竞相。

using System.ServiceModel;

namespace WCFService
{
    [ServiceContract]
    public interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}


namespace WCFService
{
    public class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
            return wcfName;
        }
    }
}
行使情形:

1.目的间的相互虽定义明确但是分外复杂,导致一组对象相互相互看重而且难以领会。
2.因为对象引用了无数任何对象并与其报道,导致对象难以复用。
3.想要定制一个分布正在多少个类中的逻辑或行为,又不想生成太多子类。

世家可以看看,在WCF中的接口与常见接口的界别只在乎三个上下文,其他的和大家正常学习的接口一样。定义这多少个上下文要添加System.ServiceModel的引用。

10.观看者模式:定义对象间的一种一对多的依赖关系,当一个指标的状态暴发变动时,所有依赖他的靶子都将收获关照并被自动更新。

[ServiceContract],来证实接口是一个WCF的接口,假使不加的话,将无法被表面调用。

使用处境:

1.有五个对象互相依赖。将它们封装在分另外目的中,就足以对它们单独开展变更和复用。
2.对一个对象的改观需要同时改变其他对象,而不明白具体有多少对象有待改变。
3.一个对象必须通报其他对象,而它又不需要知道其他对象是咋样。

[OperationContract],来表达该方法是一个WCF接口的法门,不加的话同上。 

11.结合模式:将目的组合成树形结构以表示“部分-全部”的层次结构。组合使得用户对单个对象和重组对象的拔取具有一致性。

此时大家的首先个WCF服务程序就建立好了,将User.svc“设为先导页”,然后F5运转一下试跳,如下图所示,VS2010自行调用了WCF的客户端测试工具以便我们测试程序:

运用意况:

1.想要得到对象抽象的树形标识(部分-全体层次结构)。
2.想让客户端统一处理组合结构中的所有目的。

图片 4

12.迭代器情势:提供一种情势顺序访问一个会合对象中相继要素,而又不需表露该目的的中间表示。

  咱们双击上图中的 ShowName() 方法,出现如下图:

应用情况:

1.亟待拜访组合对象的始末,而又不表露其中间表示。
2.索要经过多种办法遍历组合对象。
3.急需提供一个统一的接口,用来遍历各样类型的组合对象。

图片 5

13.访问者模式:表示一个效益于某目的社团中的各因素的操作。它让大家得以再不改变各要素的类的前提下定义功能于这多少个要素的新操作。

  在乞请窗口中的值中输入参数“你的姓名”,然后点击“调用”,在响应窗口中会出现重临值“WCF服务,显示姓名:你的真名”,表明测试成功,点击下面的XML也得以看看XML的多寡传输。大家现在建立好了劳务的应用程序和业务逻辑,即相当简单的打印姓名的法子,测试也成功了。那么大家怎么用吧?

运用意况:

1.一个扑朔迷离的对象社团包含众多其他对象,他们有两样的接口(比如组合体),可是想对那么些目的实施局部借助于其切实项目标操作。
2.亟待对一个重组结构中的对象开展过多不相干的操作,然而不想让这一个操作“污染”这一个目的的类。可以将有关的操作集中起来,定义在一个访问者类中,并在需要在访问者中定义的操作时利用它。
3.概念复杂结构的类很少作修改,但日常需要向其添加新的操作。

四、场景

14.装饰格局:动态地给一个目标添加一些附加的天职。就增加功用来说,装饰模式相比生成子类更为灵活。

  我们计划的情景是在生产中平常应用的光景,把WCF程序寄宿在IIS之上。假使场景如下:A服务器和B服务器。我们把大家正好成立的WCF程序“部署”在B服务器上(本学科的A,B服务器都放是自我自己的一台机器),我们的目的是在A服务器的应用程序来访问B服务器的WCF程序,实现劳务器端的应用程序通讯。

应用情形:

1.想要在不影响其他对象的情景下,以动态、透明的法子给单个对象添加职责。
2.想要扩充一个类的行事,却做不到。类定义可能被隐形,不能进展自泪花;或者,对类的各类行为的增加,为永葆每种意义整合,将生出大量的子类。
3.对类的天职的增加是可选的。

五、将WCF程序寄宿在B服务器的IIS之上

15.责任链形式:使五个目的都有时机处理请求,从而避免请求的发送者和接收者之间暴发耦合。此形式将这多少个目的连城一条链,并顺着这条链传递请求,知道有一个目标处理它截至。

  率先我们将WCF应用程序公布一下,然后部署在B服务器的IIS之上,如下图所示:

运用境况:

1.有五个对象可以拍卖请求,而处理程序只有在运行时才能确定。
2.向一组对象发出请求,而不想体现指定处理请求的特定处理程序。

图片 6

16.模板方法情势:定义一个操作中算法的龙骨,而将一部分不周延迟到子类中。模板方法使子类可以重定义算法的某些特定步骤而不改变算法的结构。

  鼠标右键浏览Uesr.svc,在游览器中冒出如下图所示,表达服务配置成功。

行使状况:

1.内需一回性实现算法的不变部分,并将可变的行为留给子类来实现。
2.子类的联手行为应该被提取出来放到公共类中,以防止代码重复。现有代码的出入应该被分别为新的操作。然后用一个调用这多少个新操作的沙盘方法来替换那么些不同的代码。
3.急需控制子类的恢宏。
4.对具体类或者客户端类的具体操作。
5.对抽象类的具体操作。
6.架空操作。
7.工厂方法。
8.钩子操作。

图片 7

17.策略形式:定义一多样算法,把她们一个个包装起来,并且使她们得以互相替换。本格局使得算法可独立于采用它的客户而转变。

   上图中的http://localhost/User.svc?wsdl即为我们要引用的劳动地点。

应用境况:

1.一个类在其操作中运用五个原则语句来定义许多行为。我们得以把有关的规格分支移到他俩协调的国策类中。
2.索要算法的各样变体。
3.急需避免把纷繁的、与算法相关的数据结构表露给客户端。

六、在客户端[A服务器]创立服务的引用

18.命令情势:将呼吁封装为一个对象,从而可用不同的请求对客户开展参数化,对请求排队或记录请求日志,以及辅助可撤消的操作。

  我们这边以Web应用程序为例,建立地物理地址为本机,然则我们可以想像成B服务器是长距离总计机,localhost为一个任何的IP地址。

应用境况:

1.想让应用程序襄助撤除与还原。享用对象参数化一个动作以实践操作,并用不同命令对象来取代回收函数。
2.想要在不同随时对请求举办制定、排序和施行。
3.想记录修改日志,这样在系统故障时,这么些修改可在新生重做四遍。
4.想让系统匡助工作(transaction),事务封装了对数码的一多重修改。事务可以建模为命令对象。

  新建解决方案,并且创造ASP.NET
Web应用程序的类型。命名为:WCFClient,如下图所示:

19.享元形式:运用共享技术有兄弟协理大气细力度的目的。

 

接纳处境:

1.应用程序使用过多对象。
2.在内存中保存对象会影响内存性能。
3.对象的多数特有状态可以放置外部而轻量化。
4.移除了外在状态之后,可以用较少的共享对象替代原先的这组对象应用程序不借助于对象标识,因为共享对象不同提供唯一的标识。

图片 8

20.代理形式:为此外对象提供一种代理以控制对那些目的的拜访。

  (1)新建Asp.net页面,命名为:WcfTest.aspx。

行使状况:

1.亟待一个远程代理,为身处不同地方空间或网络中的对象提供当地代表。
2.亟需一个虚构代理,来按照要求成立重型的对象。
3.内需一个维护代理,来遵照不同访问权限决定对原对象的造访。

  (2)添加在第五步中布局的劳动的引用。如下图所示:

21.备忘录情势:在不破坏封装的前提下,捕获一个对象的里边情形,并在该目的之外保存这一个状态。这样未来就可将该对象复苏到原来保存的气象。

图片 9

选取情状:

1.急需保留一个目标(或某部分)在某一个每一天的情形,这样之后就足以过来到以前的事态。
2.用以获取状态的接口会透露实现的底细,需要将其隐身起来。

  此时弹出添加服务引用的窗体,如下图所示:

22.解释器形式:给定一个语言,定义它的文法的一种象征,并定义一个解释器,这么些解释器使用该表示来表明语言中的句子。

图片 10

运用意况:

1.重复发生的问题可以动用解释器形式。
2.一个粗略语法需要解释的场地。

  我们在地方里写上大家下榻在IIS上的WCF服务的地址服务路径,此处为:http://localhost/User.svc?wsdl,在称呼空间处填写WCF瑟维斯(Service)[此称号空间要在底下的客户端中援引]下一场点击“前往”–>“确定”按钮。此时大家做到了对劳务的引用。大家重新翻开解决方案,里面多了瑟维斯(Service)References的文本夹,通过资源管理器打开后其中多了些文件,这么些文件用于客户端向服务端的调用,现在先不用管他。

23.情状格局:当一个对象的内在状态改变时允许改变其行事,这几个目的看起来像是改变了其类。

 七、使用WCF服务端的章程

应用境况:

1.一个目的的作为取决于它的意况,
并且它必须在运作时刻遵照情形改变它的表现。
2.代码中涵盖大量与目标情形有关的原则语句。

  WcfTest.aspx的代码如下:

本篇文章内容重要摘自OBJECTIVE-C编程之道 IOS设计格局解析。后续会陆续添加对应的demo。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

//引用WCF服务的名称空间
using WCFClient.WCFService;

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

        }

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

下边中的UserClient类是在充裕引用的时候生成的劳务端User类的客户端代理类,一般客户端代理类名称都会是**Client。我们运行一下看下效果。

图片 11

  通过上述的例证,大家做到了由A服务器的行使向B服务器中WCF提供的措施的调用。这些事例相比较简单,对于通常开发B/S结构应用程序的同室们来说相比好了然。

八、说明:因为网上的入门教程相比少,本课程只做入门,后边会连续讲些其余入门的事物,深入的请看园子里:Artech 表弟的作品。

九、代码下载:

  10 WCF
教程

 

原文链接:http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图