WCF入门教程Word文档下载推荐.docx
《WCF入门教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《WCF入门教程Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
2、创建一个新的ICalculator
接口,并将
ServiceContractAttribute
属性应用于该接口,并将
Namespace
值设置为“http:
//Microsoft.ServiceModel.Samples”。
此命名空间指定该服务在计算机上的路径,并构成该服务的基址部分。
请注意,在通过采用方括号表示法的属性来批注接口或类时,该属性类可以从其名称中去掉“Attribute”部分。
[ServiceContract(Namespace="
http:
//Microsoft.ServiceModel.Samples"
)]
publicinterfaceICalculator
3、在接口中创建方法声明,并将
OperationContractAttribute
属性应用于每个要作为公共WCF协定的一部分公开的方法。
[OperationContract]
doubleAdd(doublen1,doublen2);
doubleSubtract(doublen1,doublen2);
[OperationContract]
doubleMultiply(doublen1,doublen2);
doubleDivide(doublen1,doublen2);
下面是创建服务协定的完整代码段:
usingSystem;
//AddtheusingstatementfortheSytem.ServiceModelnamespace
usingSystem.ServiceModel;
namespaceMicrosoft.ServiceModel.Samples
{
//Defineaservicecontract.
)]
{
//Createthemethoddeclarationforthecontract.
doubleAdd(doublen1,doublen2);
doubleSubtract(doublen1,doublen2);
}
}
........(整个服务器端的代码未完,等讲完任务三时,再给出完整代码)
实现WCF服务协定(任务二)
1、创建一个新
CalculatorService
类,该类从用户定义的
ICalculator
接口继承而来并实现该接口定义的协定功能。
publicclassCalculatorService:
ICalculator
2、实现每个算术运算符的功能。
publicdoubleAdd(doublen1,doublen2)
doubleresult=n1+n2;
Console.WriteLine("
ReceivedAdd({0},{1})"
n1,n2);
//Codeaddedtowriteoutputtotheconsolewindow.
Return:
{0}"
result);
returnresult;
publicdoubleSubtract(doublen1,doublen2)
doubleresult=n1-n2;
ReceivedSubtract({0},{1})"
publicdoubleMultiply(doublen1,doublen2)
doubleresult=n1*n2;
ReceivedMultiply({0},{1})"
publicdoubleDivide(doublen1,doublen2)
doubleresult=n1/n2;
ReceivedDivide({0},{1})"
在创建和实现了服务协定后,下一步是运行该服务。
运行服务由三个步骤组成:
配置、承载和打开服务。
配置、承载和运行服务(任务三)
∙为服务配置基址
为服务的基址创建
Uri
实例。
此URI指定HTTP方案、本地计算机、端口号8000,以及服务协定中为服务命名空间指定的服务路径ServiceModelSample/Services。
UribaseAddress=newUri("
//localhost:
8000/ServiceModelSamples/Service"
);
∙
承载服务
1.创建一个新的
ServiceHost
实例以承载服务。
必须指定实现服务协定和基址的类型。
对于此示例,我们将基址指定为http:
8000/ServiceModelSamples/Services,并将
指定为实现服务协定的类型。
ServiceHostselfHost=newServiceHost(typeof(CalculatorService),baseAddress);
2.添加一个捕获
CommunicationException
的
try-catch
语句,并在接下来的三个步骤中将该代码添加到try块中。
3.添加公开服务的终结点。
为此,必须指定终结点公开的协议、绑定和终结点的地址。
此例中,将
指定为协定,将
WSHttpBinding
指定为绑定,并将
指定为地址。
在这里请注意,我们指定的是相对地址。
终结点的完整地址是基址和终结点地址的组合。
在此例中,完整地址是
8000/ServiceModelSamples/Services/CalculatorService。
selfHost.AddServiceEndpoint(
typeof(ICalculator),
newWSHttpBinding(),
"
CalculatorService"
4.启用元数据交换。
为此,必须添加服务元数据行为。
首先创建一个
ServiceMetadataBehavior
实例,将
HttpGetEnabled
属性设置为
true,然后为服务添加新行为。
ServiceMetadataBehaviorsmb=newServiceMetadataBehavior();
smb.HttpGetEnabled=true;
selfHost.Description.Behaviors.Add(smb);
5.打开
并等待传入消息。
用户按Enter键时,关闭
ServiceHost。
selfHost.Open();
Console.WriteLine("
Theserviceisready."
Press<
ENTER>
toterminateservice."
Console.WriteLine();
Console.ReadLine();
//ClosetheServiceHostBasetoshutdowntheservice.
selfHost.Close();
下面是服务器端(即“Service”项目中program.cs文件中)的完整程序代码:
usingSystem.ServiceModel.Description;
//Serviceclassthatimplementstheservicecontract.
//Addedcodetowriteoutputtotheconsolewindow.
publicdoubleAdd(doublen1,doublen2)
publicdoubleSubtract(doublen1,doublen2)
publicdoubleMultiply(doublen1,doublen2)
publicdoubleDivide(doublen1,doublen2)
classProgram
staticvoidMain(string[]args)
//CreateaURItoserveasthebaseaddress.
//CreateServiceHost
ServiceHostselfHost=newServiceHost(typeof(CalculatorService),baseAddress);
try
//Addaserviceendpoint.
selfHost.AddServiceEndpoint(
//Enablemetadataexchange.
ServiceMetadataBehaviorsmb=newServiceMetadataBehavior();
smb.HttpGetEnabled=true;
selfHost.Description.Behaviors.Add(smb);
//Start(andthenstop)theservice.
selfHost.Open();
Console.WriteLine();
Console.ReadLine();
//ClosetheServiceHostBasetoshutdowntheservice.
selfHost.Close();
catch(CommunicationExceptionce)
Anexceptionoccurred:
ce.Message);
selfHost.Abort();
若要运行服务,启动项目文件夹下bin目录中的Service.exe即可。
前面三篇文章是讲服务器端的部署和运行,下面讲讲客户端如何配置和使用。
创建WCF客户端(任务四)
1.通过执行以下步骤,在VisualStudio2005中为客户端创建新项目:
1.在包含该服务(之前文章所述的服务)的同一解决方案中的“解决方案资源管理器”(位于右上角)中,右击当前解决方案,然后选择“添加新项目”。
2.在“添加新项目”对话框中,选择“VisualBasic”或“VisualC#”,选择“控制台应用程序”模板,然后将其命名为
Client。
3.单击“确定”。
2.为项目提供对
在“解决方案资源管理器”中右击“Service”项目,从“.NET”选项卡上的“组件名称”列中选择“System.ServiceModel”,然后单击“确定”。
3.为
命名空间添加
语句:
4.启动在前面的步骤中创建的服务。
(即打开在服务器项目中生成的Service.exe可执行文件)
5.通过执行以下步骤,使用适当的开关运行ServiceModelMetadataUtilityTool(SvcUtil.exe)
以创建客户端代码和配置文件:
1.通过选择“开始”菜单中的“MicrosoftWindowsSDK”项下的“CMDShell”,启动WindowsSDK控制台会话。
2.导航到要放置客户端代码的目录。
如果使用默认设置创建Client项目,则目录为C:
\DocumentsandSettings\<
用户名>
\Documents\VisualStudio2008\Projects\Service\Client。
3.将命令行工具ServiceModelMetadataUtilityTool(SvcUtil.exe)
与适当的开关一起使用以创建客户端代码。
下面的示例生成服务的代码文件和配置文件。
svcutil.exe/language:
cs/out:
generatedProxy.cs/config:
app.confighttp:
8000/ServiceModelSamples/service
6.在VisualStudio中将生成的代理添加到Client项目中,方法是在“解决方案资源管理器”中右击“Client”并选择“添加现有项”。
然后选择在上一步中生成的
generatedProxy.cs
文件。
配置WCF客户端(任务五)
在VisualStudio中,将在前一过程中生成的
App.config
配置文件添加到客户端项目中。
在“解决方案资源管理器”中右击该客户端,选择“添加现有项”,然后从C:
\Documents\VisualStudio2008\Projects\Service\Client\bin目录中选择App.config
配置文件。
将app.config添加到项目中后,就算是完成了wcf客户端的配置。
因为具体的配置信息,我们在使用svcutil.exe工具时,它就帮我们配置好并写入了app.config文件。
使用WCF客户端(任务六)
1、为要调用的服务的基址创建
EndpointAddress
实例,然后创建WCF
Client
对象。
//CreateanendpointaddressandaninstanceoftheWCFClient.
EndpointAddressepAddress=newEndpointAddress("
8000/ServiceModelSamples/Service/CalculatorService"
CalculatorClientclient=newCalculatorClient(newWSHttpBinding(),epAddress);
2、从
内调用客户端操作。
//Calltheserviceoperations.
//CalltheAddserviceoperation.
doublevalue1=100.00D;
doublevalue2=15.99D;
doubleresult=client.Add(value1,value2);
Add({0},{1})={2}"
value1,value2,result);
//CalltheSubtractserviceoperation.
value1=145.00D;
value2=76.54D;
result=client.Subtract(value1,value2);
Subtract({0},{1})={2}"
//CalltheMultiplyserviceoperation.
value1=9.00D;
value2=81.25D;
result=client.Multiply(value1,value2);
Multiply({0},{1})={2}"
//CalltheDivideserviceoperation.
value1=22.00D;
value2=7.00D;
result=client.Divide(value1,value2);
Divide({0},{1})={2}"
3、在WCF客户端上调用
Close。
//Closingtheclientgracefullyclosestheconnectionandcleansupresources.
client.Close();
下面是客户端的完整代码:
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Serv