WCF入门教程.docx
《WCF入门教程.docx》由会员分享,可在线阅读,更多相关《WCF入门教程.docx(20页珍藏版)》请在冰豆网上搜索。
WCF入门教程
WCF入门教程
目录
WCF入门教程1
本节内容2
1、如何:
定义服务协定4
1.1使用接口创建WindowsCommunicationFoundation协定4
1.2示例5
2、如何:
实现服务协定5
2.1实现WCF服务协定5
2.2示例6
2.3编译代码6
3、如何:
承载和运行基本的服务6
3.1为服务配置基址6
3.2承载服务6
3.3验证服务是否正常运行7
3.4示例7
4、如何:
创建客户端8
4.1创建WindowsCommunicationFoundation客户端8
4.2示例10
4.3配置WindowsCommunicationFoundation客户端11
5、如何:
使用客户端13
5.1使用WindowsCommunicationFoundation客户端14
5.2示例14
6、入门教程疑难解答14
6.1问题:
15
6.2问题:
15
6.3问题:
15
6.4问题:
15
6.5问题:
16
6.6问题:
16
6.7问题:
16
本节中包含的主题旨在帮助您快速了解WindowsCommunicationFoundation(WCF)编程体验。
这些主题要根据本主题底部的列表中的顺序完成。
通过学习本教程,您可以初步了解创建WCF服务和客户端应用程序所需的步骤。
服务是一种构造,它公开一个或多个终结点,其中每个终结点都公开一项或多项服务操作。
服务的终结点指定下列信息:
服务所在的位置;一个绑定,其中包含客户端必须与服务进行通信的信息;一个协定,用于定义服务向其客户端提供的功能。
在完成本教程中的系列主题之后,您将会得到一个正在运行的服务,以及一个可以调用该服务操作的客户端。
前三个主题描述如何使用协定定义服务,如何实现服务,以及如何在代码中配置服务、承载服务和运行服务。
所创建的服务是自承载服务,客户端和服务都在同一计算机上运行。
服务使用代码而非配置进行配置。
另外还可以将服务承载于Internet信息服务(IIS)下。
有关如何执行此操作的更多信息,请参见“如何:
如何:
在IIS中承载WCF服务”。
也可以在配置文件中配置服务。
有关使用配置文件的更多信息,请参见使用配置文件配置服务。
后三个主题描述如何创建客户端代理,如何配置客户端应用程序,以及如何创建和使用可以访问服务功能的客户端。
服务会发布可以访问的元数据,这些数据定义了客户端应用程序与服务操作进行通信所需的构造。
WCF提供了一个ServiceModelMetadataUtilityTool(Svcutil.exe)来自动完成以下过程:
访问发布的这些元数据,然后使用这些元数据来构造和配置服务的客户端应用程序。
本节中的所有主题均假定您使用VisualStudio2008作为开发环境。
如果您使用的是其他开发环境,请忽略特定于VisualStudio的说明。
注意:
如果运行的是WindowsVista,则必须通过在“开始”菜单上右击MicrosoftVisualStudio2008,然后选择“以管理员身份运行”的方式来启动VisualStudio。
若要始终以管理员身份启动VisualStudio2008,可以创建一个快捷方式,右击该快捷方式,选择“属性”,选择“兼容性”选项卡,然后选中“请以管理员身份运行该程序”复选框。
在使用此快捷方式启动VisualStudio2008时,会总是以管理员身份运行。
有关可以下载到硬盘中并运行的示例应用程序,请参见WindowsCommunicationFoundationSamples中的主题。
有关专门针对本主题的示例,请参见GettingStartedSample。
有关创建服务和客户端的更深入信息,请参见基本WCF编程。
本节内容
如何:
定义WindowsCommunicationFoundation服务协定
描述如何使用用户定义的接口创建WCF协定。
协定用于定义服务向外界提供的功能,并向外界的潜在用户描述如何与服务进行通信。
如何:
实现WindowsCommunicationFoundation服务协定
描述如何实现服务协定。
创建了协定后,必须在一个从定义协定的接口继承的类中实现服务所提供的功能。
如何:
承载和运行基本的WindowsCommunicationFoundation服务
描述如何在代码中配置服务的终结点,以及如何在控制台应用程序内承载服务和启动服务。
若要激活服务,必须在运行时环境中配置和承载服务。
此环境将创建服务并控制其上下文和生存期。
如何:
创建WindowsCommunicationFoundation客户端
描述如何从WCF服务检索用于创建WCF客户端的元数据。
此过程使用由WCF提供的ServiceModelMetadataUtilityTool(Svcutil.exe)。
如何:
配置基本WindowsCommunicationFoundation客户端
描述如何配置使用ServiceModelMetadataUtilityTool(Svcutil.exe)创建的基本客户端。
配置客户端需要指定客户端用于访问服务的终结点。
如何:
使用WindowsCommunicationFoundation客户端
描述如何使用ServiceModelMetadataUtilityTool(Svcutil.exe)生成的WCF客户端代理来调用服务所提供的功能。
1、如何:
定义服务协定
这是创建基本WindowsCommunicationFoundation(WCF)服务和可以调用该服务的客户端所需的六项任务中的第一项任务。
有关全部六项任务的概述,请参见入门教程主题。
创建基本WCF服务时,第一项任务是定义协定。
协定指定服务支持的操作。
可以将操作视为一个Web服务方法。
通过定义C++、C#或VB接口可创建协定。
接口中的每个方法都对应于特定的服务操作。
每个接口都必须将ServiceContractAttribute应用于自身,而每个操作都必须将OperationContractAttribute应用于自身。
如果接口中的一个方法具有ServiceContractAttribute而没有OperationContractAttribute,则不公开该方法。
在操作过程后面的示例中提供了用于此任务的代码。
1.1使用接口创建WindowsCommunicationFoundation协定
1.通过在“开始”菜单中右击“VisualStudio2008”并选择“以管理员身份运行”,以管理员身份打开该程序。
2.创建新的控制台应用程序项目。
在“新建项目”对话框中,选中“VisualBasic”或“VisualC#”,并选择“控制台应用程序”模板,并命名为Service。
使用默认的位置。
3.将默认的Service命名空间更改为Microsoft.ServiceModel.Samples。
4.将对System.ServiceModel.dll的引用添加到项目。
1.在“解决方案资源管理器”中,右击项目文件夹下的“引用”文件夹,然后选择“添加引用”。
2.单击“添加引用”对话框中的“浏览”选项卡,导航到“c:
\Windows\Microsoft.Net\Framework\v3.0\WindowsCommunicationFoundation”,选择“System.ServiceModel.dll”,然后单击“确定”。
注意:
在使用命令行编译器(例如Csc.exe或Vbc.exe)时,还必须提供程序集的路径。
例如,在运行WindowsVista的计算机上,默认情况下的路径为:
Windows\Microsoft.NET\Framework\v3.0\WindowsCommunicationFoundation。
5.为System.ServiceModel命名空间添加一个using语句(在VisualBasic中为Imports)。
6.定义一个名为ICalculator的新接口,并向该接口应用Namespace值为“http:
//Microsoft.ServiceModel.Samples”的ServiceContractAttribute属性。
显式指定命名空间是一种最佳做法,因为这样可防止将默认命名空间值添加到协定名称。
注意:
使用属性来批注接口或类时,可以从属性名称中去掉“Attribute”部分。
因此ServiceContractAttribute将变成[ServiceContract]
7.在接口中为ICalculator协定公开的每个操作(加、减、乘和除)声明一个方法,并对希望作为公共WCF协定的一部分公开的每个方法应用OperationContractAttribute属性。
1.2示例
下面的代码示例演示一个定义服务协定的基本接口。
现在已创建接口。
生成该项目以确保不存在编译错误,然后按照如何:
实现WindowsCommunicationFoundation服务协定中的说明实现接口。
有关疑难解答信息,请参见入门教程疑难解答。
2、如何:
实现服务协定
这是创建基本WindowsCommunicationFoundation(WCF)服务和可以调用该服务的客户端所需的六项任务中的第二项任务。
有关全部六项任务的概述,请参见入门教程主题。
创建WCF服务要求首先创建使用接口定义的协定。
有关创建该接口的更多信息,请参见如何:
定义WindowsCommunicationFoundation服务协定。
本示例中显示的下一步骤是实现接口。
这涉及到创建一个名为CalculatorService的类,该类实现用户定义的ICalculator接口。
在操作过程后面的示例中提供了用于此任务的代码。
2.1实现WCF服务协定
1.在定义了ICalculator接口的同一文件中创建一个名为CalculatorService的新类。
CalculatorService实现ICalculator接口。
2.在CalculatorService类中实现在ICalculator接口中定义的每个方法。
注意:
已经添加写入输出代码以方便测试。
2.2示例
下面的代码示例演示定义协定的接口和接口的实现。
现在已创建并实现了服务协定。
生成该解决方案以确保不存在编译错误,然后按照如何:
承载和运行基本的WindowsCommunicationFoundation服务中的说明运行服务。
有关疑难解答信息,请参见入门教程疑难解答。
2.3编译代码
如果使用的是命令行编译器,则必须引用System.ServiceModel程序集。
3、如何:
承载和运行基本的服务
这是创建基本WindowsCommunicationFoundation(WCF)服务和可以调用该服务的客户端所需的六项任务中的第三项任务。
有关全部六项任务的概述,请参见入门教程主题。
本主题描述如何运行基本的WindowsCommunicationFoundation(WCF)服务。
此过程包含以下步骤:
∙为服务创建基址。
∙为服务创建服务主机。
∙启用元数据交换。
∙打开服务主机。
在过程后面的以下示例中提供了在此任务中编写的代码的完整清单。
将下面的代码添加到Program类中定义的Main()方法。
此类是在您创建Service解决方案时生成的。
3.1为服务配置基址
1.为服务的基址创建Uri实例。
此URI指定HTTP方案、本地计算机、端口号8000,以及服务协定中为服务命名空间指定的服务路径ServiceModelSample/Service。
3.2承载服务
1.导入System.ServiceModel.Description命名空间。
这行代码应该与using或imports语句的其余部分一起放置在Program.cs/Program.vb文件的顶部。
2.创建一个新的ServiceHost实例以承载服务。
必须指定实现服务协定和基址的类型。
对于此示例,基址为http:
//localhost:
8000/ServiceModelSamples/Service,CalculatorService为实现服务协定的类型。
3.添加一个捕获CommunicationException的try-catch语句,并在接下来的三个步骤中将该代码添加到try块中。
catch子句应该显示错误信息,然后调用selfHost.Abort()。
4.添加公开服务的终结点。
为此,必须指定终结点公开的协议、绑定和终结点的地址。
对于此示例,将ICalculator指定为协定,将WSHttpBinding指定为绑定,并将CalculatorService指定为地址。
在这里请注意,终结点地址是相对地址。
终结点的完整地址是基址和终结点地址的组合。
在此例中,完整地址是http:
//localhost:
8000/ServiceModelSamples/Service/CalculatorService。
5.启用元数据交换。
为此,添加服务元数据行为。
首先创建一个ServiceMetadataBehavior实例,将HttpGetEnabled属性设置为true,然后为服务添加新行为。
有关发布元数据时出现的安全问题的更多信息,请参见元数据的安全注意事项。
6.打开ServiceHost并等待传入消息。
用户按Enter键时,关闭ServiceHost。
3.3验证服务是否正常运行
1.从VisualStudio内部运行service.exe。
在WindowsVista上运行时,必须使用管理员特权运行服务。
由于VisualStudio是使用管理员特权运行的,因此service.exe也是使用管理员特权运行的。
也可以启动新的命令提示,使用管理员特权运行它,并在其中运行service.exe。
2.打开InternetExplorer,并浏览到服务的调试页(网址为http:
//localhost:
8000/ServiceModelSamples/Service)。
3.4示例
下面的示例包括本教程中前面步骤的服务协定和实现,并将服务承载于控制台应用程序中。
将以下内容编译为可执行文件Service.exe。
在编译代码时,务必引用System.ServiceModel.dll。
注意:
此类服务需要在计算机上注册HTTP地址以进行侦听的权限。
管理员帐户具有此权限,但必须授予非管理员帐户对HTTP命名空间的权限。
有关如何配置命名空间保留的更多信息,请参见配置HTTP和HTTPS。
在VisualStudio下运行时,必须使用管理员特权运行service.exe。
此时服务正在运行。
继续执行如何:
创建WindowsCommunicationFoundation客户端中的步骤。
有关疑难解答信息,请参见入门教程疑难解答。
4、如何:
创建客户端
这是创建基本WindowsCommunicationFoundation(WCF)服务和可以调用该服务的客户端所需的六项任务中的第四项任务。
有关全部六项任务的概述,请参见入门教程主题。
本主题描述如何检索WCF服务中的元数据,以及如何使用这些元数据创建可以访问该服务的WCF代理。
此任务是通过使用WCF所提供的ServiceModelMetadataUtilityTool(Svcutil.exe)完成的。
此工具可以获取服务的元数据,并使用所选语言生成代理的托管源代码文件。
除了创建客户端代理外,该工具还会为客户端创建配置文件,以使客户端应用程序能够连接至其某个终结点上的服务。
客户端应用程序会使用生成的代理创建WCF客户端对象。
如何:
使用WindowsCommunicationFoundation客户端中对此过程进行了描述。
在操作过程后面的示例中提供了用于此任务产生的客户端的代码。
4.1创建WindowsCommunicationFoundation客户端
1.通过执行以下步骤,在中在当前解决方案中为客户端创建一个新项目:
1.在包含该服务的同一解决方案中的“解决方案资源管理器”(位于右上角)中,右击当前解决方案(而不是项目),选择“添加”,然后选择“新项目”。
2.在“添加新项目”对话框中,选择“VisualBasic”或“VisualC#”,选择“控制台应用程序”模板,然后将其命名为Client。
使用默认的位置。
3.单击“确定”。
2.为项目添加对System.ServiceModel.dll的引用:
1.在“解决方案资源管理器”中的“Client”项目下右击“引用”文件夹,然后选择“添加引用”。
2.选择“最近”选项卡,并从列表框选择“System.ServiceModel.dll”,然后单击“确定”。
因为已在本教程的第一步添加了对该程序集的引用,所以该程序集现在列在“最近”选项卡中。
如果在“最近”选项卡中看不到该程序集,请选择“浏览”选项卡并导航至C:
\Windows\Microsoft.NET\Framework\v3.0\WindowsCommunicationFoundation,然后从这里选择该程序集。
注意:
在使用命令行编译器(例如Csc.exe或Vbc.exe)时,还必须提供程序集的路径。
例如,在运行WindowsVista的计算机上,默认情况下的路径为:
Windows\Microsoft.NET\Framework\v3.0\WindowsCommunicationFoundation。
3.在生成的Program.cs或Program.vb文件中为System.ServiceModel命名空间添加一个using语句(在VisualBasic中为Imports)。
VisualBasic
复制代码
ImportsSystem.ServiceModel;
C#
复制代码
usingSystem.ServiceModel;
4.启动在前面的步骤中创建的服务。
有关更多信息,请参见如何:
承载和运行基本的WindowsCommunicationFoundation服务。
5.通过执行以下步骤,使用适当的开关运行ServiceModelMetadataUtilityTool(SvcUtil.exe)以创建客户端代码和配置文件:
1.通过选择“开始”菜单中的“MicrosoftWindowsSDK”项下的“CMDShell”,启动WindowsSDK控制台会话。
2.导航到要放置客户端代码的目录。
如果创建该客户端项目时使用了默认设置,则目录为C:
\Users\<用户名>\Documents\VisualStudio2005\Projects\Service\Client。
3.将命令行工具ServiceModelMetadataUtilityTool(SvcUtil.exe)与适当的开关一起使用以创建客户端代码。
下面的示例生成服务的代码文件和配置文件。
[VisualBasic]
复制代码
svcutil.exe/language:
vb/out:
generatedProxy.vb/config:
app.confighttp:
//localhost:
8000/ServiceModelSamples/service
[C#]
复制代码
svcutil.exe/language:
cs/out:
generatedProxy.cs/config:
app.confighttp:
//localhost:
8000/ServiceModelSamples/service
默认情况下,将在一个以服务命名的文件(例如,在本示例中将为CalculatorService.cs或CalculatorService.vb,其扩展名与编程语言相对应:
.vb对应于VisualBasic,.cs对应于C#)中生成客户端代理代码。
/out开关会将客户端代理文件的名称更改为generatedProxy.cs。
/config开关会将客户端配置文件的名称从默认的output.config更改为app.config。
请注意,这两个文件都是在C:
\Users\<用户名>\Documents\VisualStudio2005\Projects\Service\Client目录中生成的。
6.在VisualStudio中将生成的代理添加到该客户端项目中,方法是在“解决方案资源管理器”中右击该客户端项目,选择“添加”,然后选择“现有项”。
然后选择在上一步中生成的generatedProxy.cs文件。
4.2示例
此示例演示由ServiceModelMetadataUtilityTool(Svcutil.exe)生成的客户端代码。
现在您已经创建了一个WindowsCommunicationFoundation(WCF)客户端。
请继续执行如何:
配置基本WindowsCommunicationFoundation客户端中的步骤配置该客户端。
有关疑难解答信息,请参见入门教程疑难解答。
如何:
配置客户端
这是创建基本WindowsCommunicationFoundation(WCF)服务和可以调用该服务的客户端所需的六项任务中的第五项任务。
有关全部六项任务的概述,请参见入门教程主题。
本主题要将使用ServiceModelMetadataUtility(Svcutil.exe)生成的客户端配置文件添加到客户端项目中,并解释客户端配置元素的内容。
配置客户端包括指定客户端用于访问服务的终结点。
每个终结点都有一个地址、一个绑定和一个协定,所有这些元素都必须在配置客户端的过程中指定。
在过程后面的示例中提供了为客户端生成的配置文件的内容。
4.3配置WindowsCommunicationFoundation客户端
1.在VisualStudio中,将在前一过程如何:
创建WindowsCommunicationFoundation客户端中生成的App.config配置文件添加到客户端项目中。
在“解决方案资源管理器”中右击客户端项目,选择“添加”,然后选择“现有项”。
然后,从C:
\Users\<用户名>\Documents\VisualStudio2005\Projects\Service\Client目录中选择App.config配置文件。
(之所以命名为App.config文件,是因为在使用Svcutil.exe工具生成此文件时使用了/config:
app.config开关)。
单击