WCF开发实战培训教材.docx

上传人:b****6 文档编号:3714014 上传时间:2022-11-24 格式:DOCX 页数:17 大小:26.06KB
下载 相关 举报
WCF开发实战培训教材.docx_第1页
第1页 / 共17页
WCF开发实战培训教材.docx_第2页
第2页 / 共17页
WCF开发实战培训教材.docx_第3页
第3页 / 共17页
WCF开发实战培训教材.docx_第4页
第4页 / 共17页
WCF开发实战培训教材.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

WCF开发实战培训教材.docx

《WCF开发实战培训教材.docx》由会员分享,可在线阅读,更多相关《WCF开发实战培训教材.docx(17页珍藏版)》请在冰豆网上搜索。

WCF开发实战培训教材.docx

WCF开发实战培训教材

WCF开发实战系列教程

1:

创建第一个WCF服务

在这个实战中我们将使用DataContract,ServiceContract来构建WCF服务,并使用VS2008内置的“WCFSVCHost”运行我们创建的WCF服务,并使用“WCF测试客户端”来测试我们创建的服务。

在此WCF服务中我们将建立一个关于Book的服务,并实现对Book的添加、删除和检索操作。

第一步:

创建“WCF服务库”

“文件(F)”->“新建项目(P)...”打开新建项目对话框。

在左侧的“项目类型”中选择“WCF”,然后再在右侧的“模板”中选择“WCF服务库”。

在下面的“名称”文本框中,填写我们要创建的WCF服务库的项目名称“Services”。

《图1》点击确定,会创建出我们的WCF服务库项目,在解决方案中会自动为我们生成两个类文件“IService.cs”和“Service.cs”。

《图2》这两个类文件是两个WCF示例文件,对我们开发没有什么用处,现在我们删掉这两个文件。

第二步:

创建Book实体类在“解决方案窗口”中,我们右击Services项目名,选择“添加”,再单击“类”

《图3》在弹出的“添加新项”窗口中,选择“类”,并在“名称”文本框中写入项名称“Book.cs”。

《图4》

第三步:

为Book实体类编写代码

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;usingSystem.Runtime.Serialization;

namespaceServices

{

    [DataContract]   publicclass Book

   {

        [DataMember]       publicstring BookNO;

        [DataMember]       publicstring BookName;

       [DataMember]       publicdecimal BookPrice;

   }

}为了保证此类在WCF调用中能够被序列化,我们在Book类上面加入[DataContract]标签,在每个需要序列化的成员变量上加入[DataMember]标签。

这两个标签在使用的进候需要导入usingSystem.Runtime.Serialization命名空间。

到此为至,我们创建完了需要在服务中传输的复杂的数据类型Book。

第四步:

创建服务接口创建服务接口,声明对外发布的类和方法。

在“解决方案窗口”中,我们右击Services项目名,选择“添加”,再单击“类”

《图3》在弹出的“添加新项”窗口中,选择“类”,并在“名称”文本框中写入项名称“IBookService.cs”。

《图5》在此类文件中我们编写服务接口,代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;usingSystem.ServiceModel;

namespaceServices

{

   [ServiceContract]   publicinterface IBookService

   {

        [OperationContract]       void AddBooks(Bookbook);

       [OperationContract]        ListGetAllBooks();        [OperationContract]       void RemoveBook(stringid);

   }

}在IBookService接口上面,我们定义了[ServiceContract]标签,此标签代表此接口及实现此接口的类都是对外发布的Service类,在每个需要对外发布的方法上都加上[OperationContract]标签,以使外部可以访问到此方法。

[ServiceContract]和[OperationContract]这两个标签需要导入usingSystem.ServiceModel命名空间。

第五步:

创建实现服务接口的类实现我们上面声明的服务接口,实现对Book的添加、删除和检索的具体功能。

在“解决方案窗口”中,我们右击Services项目名,选择“添加”,再单击“类”

《图3》在弹出的“添加新项”窗口中,选择“类”,并在“名称”文本框中写入项名称“BookService.cs”。

《图6》在此类文件中编写代码实现IBookService.cs服务接口。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;usingSystem.ServiceModel;

namespaceServices

{

    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]   publicclass BookService:

IBookService

   {

       List_Books=newList();

       publicvoid AddBooks(Bookbook)

       {

           book.BookNO=Guid.NewGuid().ToString();

           _Books.Add(book);

       }

       publicList GetAllBooks()

       {

           return_Books;

       }

       publicvoid RemoveBook(stringid)

       {

           Bookbook=_Books.Find(p=>p.BookNO==id);

           _Books.Remove(book);

       }

   }

}此类是对IBookService接口的具体实现,在此类的上面我们声明了[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]标签,此标签代表这个类采用SingleTone(单类模式)来生成对象。

使用[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]接口需要导入usingSystem.ServiceModel;命名空间。

第六步:

配置WCF服务到目前为至,我们建立好了WCF服务,那我们如何让WCFSVCHost(WCF服务主机)理解我们编写的服务类,并能够运行我们编写的服务呢。

这需要我们在App.Config里面注册一下我们的WCF服务。

代码如下:

   

     

       

         

           

         

       

       

       

         

           

//localhost:

8731/Design_Time_Addresses/Services/Service1/"/>

         

       

     

   

   

     

       

         

--为避免泄漏元数据信息,

         请在部署前将以下值设置为false并删除上面的元数据终结点-->

         

         

--要接收故障异常详细信息以进行调试,          请将下值设置为true。

在部署前 

           设置为false以避免泄漏异常信息-->

         

       

     

   

这么多东西谁能记得下?

没关系,VS2008为我们提供了可视化的操作界面。

在Services项目中右击“App.Config”配置文件,在弹出的右键菜单中选择“编辑WCF配置”。

《图7》弹出界面如下:

《图8》在此界面中暴露两个对外的终结点(外部可以访问到的类或接口),其中下面一个是元数据终结点,用来向外提供服务信息的终结点。

而另一个(即上面的终结点),是向外公布我们编写的[ServiceContract]的类,但我们可以看到它的Contract还是我们在第一步中删掉的Services.IService1这个终结点。

不仅如此,在右侧的服务中还依旧是我们在第一步中删除的Services.Service1服务。

这说明虽然在第一步中我们删除了那两个自动生成的类文件,但配置文件中仍没有删除这两个类文件的配置信息。

下面我们把它们改变一下。

单击左侧的“服务”-“Services.Service1”在右侧的Name,弹出“服务类型浏览器”对话框,在此类型中我们找到此WCF服务项目编译出来的Services.dll文件,双击它就可以出现此服务中的对外公布的服务,点击选中它单击确定。

《图9》这样我们就可以把对外公司的服务改变为我们刚编写的服务了。

然后,我们展开左侧“服务”->“Services.BookService”->“终结点”,单击第一个“空名称”,从右边的“终结点属性”中的Contract中我们可以看到,这里的Contract仍然用的是Services.IService1。

《图10》那我们按照上面的做法,找到此WCF服务项目编译出来的Services.dll,双击它找到里面对应的ServiceContract点击确定就可以了。

《图11》点击菜单“文件”-“保存”就可以把我们对App.Config的修改保存回配置文件了。

OK,现在我们对WCF的配置算是完成了

第七步:

运行WCF进行测试。

   在VS2008中为我们提供了测试WCF的工具,按F5启动WCF会出现两个东西

   一个是在右下角的托盘图标中会出现WCFSVCHost(WCF服务主机),它为我们在开发时候提供了一个运行WCF的服务器,用来为测试客户端提供WCF服务。

   图《12》

   另一个是“WCF测试客户端”

   图《13》

   “测试客户端”从WcfSVCHost中取得WCF服务的元数据,解析为右侧的“服务结构树”,从这里面我们可以看到此WCF服务为我们提供了一个服务契约“IBookService”,此服务契约中对外提供了三个可调用的方法。

   双击AddBooks()方法,我们可以从右面输入相关的数据然后点击“调用”,就可以把数据送给WCF服务器,去调用对应的方法了。

   图《14》

   双击GetAllBooks方法,我们可以查看添加的书的信息

   图《15》

   双击RemoveBoo()方法就可以把书删除

   图《16》

 

2:

使用IIS发布WCF服务

上一篇中,我们创建了一个简单的WCF服务,在测试的时候,我们使用VS2008自带的WCFSVCHost(WCF服务主机)发布WCF服务,以便进行测试。

这种VS2008内置的WCFSVCHost只适用于开发人员测试的使用,能进行WCF服务部署。

这一篇文章中我们来看一下如何在IIS中部发布我们上一篇中做好的WCF服务。

第一步:

打开我们上一篇文章中建立的WCF服务项目。

图《1》

第二步:

新建WCF服务站点。

在解决方案上右击,选择“添加”->“新建网站”,打开新建网站对话框。

在“添加新网站”对话框中,我们选择“WCF服务”,并把网站的名子命名为“BookServiceHost”

图《2》建立起来的新的WCF服务站点的结果如下,其中在App_Code文件中自动为我们生成两个类文件:

IService.cs和Service.cs。

这两个文件对我们来说没有用,我们删掉。

图《3》

第三步:

在刚刚创建的WCF服务站点上添加对WCF服务库项目--Services项目的引用。

图《4》

第四步:

配置Service.svc文件。

双击Service.svc文件,我们可以看到它的声明指示如下:

<%@ServiceHostLanguage="C#"Debug="true"Service="Service"CodeBehind="~/App_Code/Service.cs"%>由于在第二步中我们已经把IService.cs和Service.cs两个文件已经删除了,所以这里的声明指示内容修改一下,让这个Service.svc文件的后台代码指向我们上次创建的WCF服务库项目--Services项目中的类,改后的代码如下:

<%@ServiceHostLanguage="C#"Debug="true"Service="Services.BookService"%>我们把其中的Service属性指定为Services命名空间下的BookService类,并把CodeBehind属性删去了。

第五步:

配置此WCF服务站点与WCF服务库项目之间的类的对应。

虽然在第三步中我们添加了对Services项目的引用,并且在第四步中修改了Service.svc的类的对应,但此时我们的WCF服务站点并不能把WCF服务库中的服务和终结点发布出来,还需要我们对web.config进行一系列的配置工作。

在web.config上右击选择“编辑WCF配置”

《图5》在弹出的服务配置窗口中,把Service服务指定到WCF服务库的Services.dll中的Services.BookService服务类上。

《图6》再把其中的一个对外终结点的Contract设为WCF服务库的Services.dll中的Services.IBookService服务契约上。

《图7》

第六步:

试着再添加一个通信的终结点。

这一步是可选的,我们再为此WCF服务站点添加一个终结点,A=basicB=basicHttpBinding C=Services.IBookService

《图8》下面我们将试着使用不同的终结点与WCF服务进行交互,查看运行情况。

当我们使用IIS5或IIS6发布WCF服务的时候一般只创建Http绑定的终结点,而不能创建使用TCP绑定、管道绑定的终结点。

第七步:

测试运行WCF服务站点。

在Service.svc上右击,选择“在浏览器中查看”,在IE中运行此服务。

《图9》由此我们看到我们可以在ASP.NETDevelopmentServer中发布我们的WCF服务了。

第八步:

在IIS布署此WCF服务站点。

在IIS建立Web应用程,指向我们的WCF服务站点所在的目录。

然后在IIS运行我们发布的WCF服务

《图10》从上图中我们看到发布的站点中不再包含有端口号。

到此为至我们在IIS中发布WCF服务成功。

下面我们在WCF测试客户端调用我们刚刚在IIS中发布的WCF服务第九点:

在VS2008命令窗口中输入以下代码运行WCF测试客户端

   x:

\...\wcftestclient http:

//localhost/TestWCFService/Service.svc弹出测试窗口如下:

《图11》我们可以看到发布的服务中有两个终结点:

这两个终结点的传输方式不同,但提供的方法是相同的。

我们通过第一个终结点的AddBooks()方法添加三个对象。

《图12》再通过第二个终结点的GetAllBooks()方法取得所有对象的信息。

《图13》运行完全没问题。

3:

自运行WCF服务

上一篇文章中我们建立了一个WCF服务站点,为WCF服务库运行提供WEB支持,我们把这个WCF服务站点布署到IIS中去,实现WCF服务在Web上的发布。

这一篇文章中我们来谈一下“自运行WCF服务”。

什么是“自运行WCF服务”呢?

就是通过我们编写的控制台程序或WinForm程序来为本机或远程机提供WCF服务的方式。

下面我们使用控制台程序来提供WCF的自运行服务

第一步:

建立控制台应用程序ConsoleBookServiceHost

《图1》第二步:

向ConsoleBookServiceHost程序中添加两个引用:

一个是WCF服务库Services项目的引用,另一个是System.ServiceModel引用。

第三步:

在ConsoleBookServiceHost项目中的Program.cs中编写代码。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;usingServices;//导入WCF服务库项目命名空间usingSystem.ServiceModel;//导入WCF服务命名空间

namespaceConsoleBookServiceHost

{

   publicclassProgram

   {

       publicstaticvoidMain(string[]args)       {

           //实例化ServiceHost服务承载器,并在构造函数中指定要发布的BookService

            ServiceHosthost=newServiceHost(typeof(BookService));           //打开服务承载器,读取配置文件中的WCF服务的配置信息

           host.Open();           Console.WriteLine("服务已启动......");

           Console.ReadLine();

            host.Close();       }

   }

}

第四步:

在ConsoleBookServiceHost中添加配置文件App.Config。

《图2》

第五步:

在App.Config上右击选择选择“编辑WCF配置”,弹出服务配置管理窗口

《图3》由于该App.Config文件是我们新添加的一个配置文件,所以左边的服务项中是空的。

第六步:

点击右边的“新建服务...”弹出“新建服务元素向导”窗口,单击“浏览”按钮,选择Bin/Debug目录下Services.dll程序集中的Services.BookService服务。

《图4》

第七步:

单击“下一步”,是“选择服务契约”项,单击“浏览”按钮,选择Bin/Debug目录下Services.dll程序集中的Services.IBookService服务契约。

《图5》

第八步:

单击“下一步”,是“选择通信模式”的界面。

在这里我们先选择Http

《图6》

第九步:

单击“下一步”,是选择Http通信的“互操作方式”。

界面中有两项供我们选择:

基本Web互操作性和高级web互操作性。

在这里我们选择第一项

《图7》

第十步:

单击“下一步”,是“选择终结点地址”,也就告诉程序访问这个终结点的路径地址。

这里的地址可以使用http:

//....格式的绝对地址,也可以像图中那样使用相对地址。

《图8》第十一步:

单击“下一步”,出来配置成功界面,单击“完成”完成此次配置

《图9》此时WCF配置窗口中会出现一个服务节点,其中的终结点就是我们刚才配置信息A=basicB=basicHttpBindingC=Service.IBookService

《图10》

第十二步:

下面我们再使用向导添加一个终结点点击左侧的“服务”节点,出现界面如下:

《图11》点击“新建服务终结点...”处弹出向导,选择服务契约

《图5》点击“下一步”出现界面“选择通信模式”,这里我们还是选择Http

《图6》点击“下一步”出现界面“互操作方式”,这里我们选择“高级web互操作性”,这种互操作方式的安全性比较高

《图12》点击“下一步”出现界面“选择终结点地址”,这里我们使用相对地址,填写ws

《图13》点击“下一步”出现配置成功界面,单击“完成”完成此次配置

《图14》此时WCF配置窗口中又会多出一个服务节点,其中的终结点就是我们刚才配置信息A=wsB=ws2007HttpBindingC=Service.IBookService

《图15》

到目前为止我们配置好了两个http通道下的两个终结点,但这两个终结点的地址我们都使用的是相对地址,它们是相对于当前ServiceHost地址,所以我们还需要配置当前ServiceHost的地址.

第十三步:

配置ServiceHost的地址:

点击左侧“配置”中的“主机”,在右边点击“新建”按钮,在弹出的窗口中写入ServiceHost的地址,在这里可以选择使用端口号。

《图16》这样我们两个终结点算是配置完成了。

“自运行WCF服务”与上一篇说的“在IIS布运行WCF服务”不一样的是,“自运行WCF服务"除了可以使用Http方式发布WCF服务,可以使用TCP、命名管道和微软消息队列进行信息传输。

下面我们再配置两个终结点,一个是使用TCP通信模式,另一个使用命名管道通信模式。

第十四步:

添加一个新的TCP终结点,配置如下:

《图17》

第十五步:

添加一个新的命名管道终结点,配置如下:

《图18》

到此为至,我们已经为该WCF服务建立了四个数据传输的终结点:

《图19》

下面我们为该ServiceHost程序配置“元数据终结点”,以向客户端发送服务元数据信息

第十六步:

添加服务行为。

在左侧配置中选择“高级”-“服务行为”,再点击右侧的“新建服务行为

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1