WCF from MSDN.docx
- 文档编号:4944928
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:23
- 大小:25.35KB
WCF from MSDN.docx
《WCF from MSDN.docx》由会员分享,可在线阅读,更多相关《WCF from MSDN.docx(23页珍藏版)》请在冰豆网上搜索。
WCFfromMSDN
Howto:
DefineaWindowsCommunicationFoundationServiceContract
ThisisthefirstofsixtasksrequiredtocreateabasicWindowsCommunicationFoundation(WCF)serviceandaclientthatcancalltheservice.Foranoverviewofallsixofthetasks,seethe GettingStartedTutorial topic.
WhencreatingabasicWCFservice,thefirsttaskistodefineacontract.Thecontractspecifieswhatoperationstheservicesupports.AnoperationcanbethoughtofasaWebservicemethod.ContractsarecreatedbydefiningaC++,C#,orVisualBasic(VB)interface.Eachmethodintheinterfacecorrespondstoaspecificserviceoperation.Eachinterfacemusthavethe ServiceContractAttribute appliedtoitandeachoperationmusthavethe OperationContractAttribute appliedtoit.Ifamethodwithinaninterfacethathasthe ServiceContractAttribute doesnothavethe OperationContractAttribute,thatmethodisnotexposed.
Thecodeusedforthistaskisprovidedintheexamplefollowingtheprocedure.
TocreateaWindowsCommunicationFoundationcontractwithaninterface
1.OpenVisualStudio2010asanadministratorbyright-clickingtheprograminthe Start menuandselecting Runasadministrator.
2.Createanewconsoleapplicationproject.Clickthe File menuandselect New, Project.Inthe NewProject dialog,select VisualBasic or VisualC#,andchoosetheConsoleApplication template,andnameit Service.Usethedefault Location.
3.ForaC#projectVisualStudiocreatesafilecalledProgram.cs.ThisclasswillcontainanemptymethodcalledMain().ForaVBproject,VisualStudiocreatesafilecalledModule1.vbwithanemptysubroutinecalledMain().Thesemethodsarerequiredforaconsoleapplicationprojecttobuildcorrectly,soyoucansafelyleavethemintheproject.
4.Changethedefault Service namespaceto Microsoft.ServiceModel.Samples.Todothis,right-clicktheprojectinthe SolutionExplorer andselect Properties.Makesurethatthe Application tabontheleftsideofthe Properties dialogisselected.ForaC#project,type Microsoft.ServiceModel.Samples intheeditboxlabeled DefaultNamespace.ForaVBproject,type Microsoft.ServiceModel.Samples intheeditboxlabeled Root namespace.Clickthe File menuandselect SaveAll tosaveyourchanges.
5.IfyouareusingC#,changethenamespaceinthegeneratedProgram.csfileto Microsoft.ServiceModel.Samples asshowninthefollowingexample.
C#
namespaceMicrosoft.ServiceModel.Samples
{
classProgram
{
staticvoidMain(string[]args)
{
}
}
}
IfyouareusingVB,addaNamespacestatementandanEndNamespacestatementtothegeneratedModule1.vbasshowninthefollowingexample.
VB
NamespaceMicrosoft.ServiceModel.Samples
ModuleModule1
SubMain()
EndSub
EndModule
EndNamespace
6.Addareferenceto System.ServiceModel.dll totheproject:
a.Inthe SolutionExplorer,right-clickthe References folderundertheprojectfolderandchoose AddReference.
Note:
Whenusingacommand-linecompiler(forexample,Csc.exeorVbc.exe),youmustalsoprovidethepathtotheassemblies.Bydefault,onacomputerrunningWindowsVistaforexample,thepathis:
"Windows\Microsoft.NET\Framework\v4.0".
b.Selectthe .NET tabinthe AddReference dialogandscrolldownuntilyousee System.ServiceModel (version4.0.0.0),selectit,andclick OK.
7.Adda using statement(Imports inVisualBasic)forthe System.ServiceModel namespace.
C#
VB
usingSystem.ServiceModel;
8.InProgram.cs(Module1.vbforVB),defineanewinterfacecalled ICalculator andapplythe ServiceContractAttribute attributetotheinterfacewitha Namespace valueof"http:
//Microsoft.ServiceModel.Samples".Specifyingthenamespaceexplicitlyisabestpracticebecauseitpreventsthedefaultnamespacevaluefrombeingaddedtothecontractname.
Note:
Whenusingattributestoannotateaninterfaceorclass,youcandropthe"Attribute"partfromtheattributename.So ServiceContractAttribute becomes[ServiceContract] inC#,or
9.C#
10.VB
11.[ServiceContract(Namespace="http:
//Microsoft.ServiceModel.Samples")]
12.publicinterfaceICalculator
13.
14.Declareamethodforeachoftheoperationsthe ICalculator contractexposes(add,subtract,multiply,anddivide)withintheinterfaceandapplytheOperationContractAttribute attributetoeachmethodthatyouwanttoexposeaspartofthepublicWCFcontract.
C#
VB
[OperationContract]
doubleAdd(doublen1,doublen2);
[OperationContract]
doubleSubtract(doublen1,doublen2);
[OperationContract]
doubleMultiply(doublen1,doublen2);
[OperationContract]
doubleDivide(doublen1,doublen2);
Example
Thefollowingcodeexampleshowsabasicinterfacethatdefinesaservicecontract.
C#
VB
usingSystem;
//Step5:
AddtheusingstatementfortheSystem.ServiceModelnamespace
usingSystem.ServiceModel;
namespaceMicrosoft.ServiceModel.Samples
{
//Step6:
Defineaservicecontract.
[ServiceContract(Namespace="http:
//Microsoft.ServiceModel.Samples")]
publicinterfaceICalculator
{
//Step7:
Createthemethoddeclarationforthecontract.
[OperationContract]
doubleAdd(doublen1,doublen2);
[OperationContract]
doubleSubtract(doublen1,doublen2);
[OperationContract]
doubleMultiply(doublen1,doublen2);
[OperationContract]
doubleDivide(doublen1,doublen2);
}
}
Nowtheinterfaceiscreated,proceedto Howto:
ImplementaWindowsCommunicationFoundationServiceContract toimplementtheinterface.Fortroubleshootinginformation,see TroubleshootingtheGettingStartedTutorial.
Howto:
ImplementaWindowsCommunicationFoundationServiceContract
ThisisthesecondofsixtasksrequiredtocreateabasicWindowsCommunicationFoundation(WCF)serviceandaclientthatcancalltheservice.Foranoverviewofallsixtasks,seethe GettingStartedTutorial topic.
CreatingaWCFservicerequiresthatyoufirstcreatethecontract,whichisdefinedusinganinterface.Formoreinformationaboutcreatingtheinterface,see Howto:
DefineaWindowsCommunicationFoundationServiceContract.Thenextstep,showninthisexample,istoimplementtheinterface.Thisinvolvescreatingaclasscalled CalculatorServicethatimplementstheuser-defined ICalculator interface.Thecodeusedforthistaskisprovidedintheexamplefollowingtheprocedure.
ToimplementaWCFservicecontract
1.Createanewclasscalled CalculatorService inthesamefilewhereyoudefinedthe ICalculator interface.The CalculatorService implementsthe ICalculator interface.
C#
VB
publicclassCalculatorService:
ICalculator
2.Implementeachmethoddefinedinthe ICalculator interfacewithinthe CalculatorService class.
C#
VB
publicdoubleAdd(doublen1,doublen2)
{
doubleresult=n1+n2;
Console.WriteLine("ReceivedAdd({0},{1})",n1,n2);
//Codeaddedtowriteoutputtotheconsolewindow.
Console.WriteLine("Return:
{0}",result);
returnresult;
}
publicdoubleSubtract(doublen1,doublen2)
{
doubleresult=n1-n2;
Console.WriteLine("ReceivedSubtract({0},{1})",n1,n2);
Console.WriteLine("Return:
{0}",result);
returnresult;
}
publicdoubleMultiply(doublen1,doublen2)
{
doubleresult=n1*n2;
Console.WriteLine("ReceivedMultiply({0},{1})",n1,n2);
Console.WriteLine("Return:
{0}",result);
returnresult;
}
publicdoubleDivide(doublen1,doublen2)
{
doubleresult=n1/n2;
Console.WriteLine("ReceivedDivide({0},{1})",n1,n2);
Console.WriteLine("Return:
{0}",result);
returnresult;
}
Note:
Thewriteoutputcodehasbeenaddedtomaketestingconvenient.
Example
Thefollowingcodeexampleshowsboththeinterfacethatdefinesthecontractandtheimplementationoftheinterface.
C#
VB
usingSystem;
usingSystem.ServiceModel;
namespaceMicrosoft.ServiceModel.Samples
{
//Defineaservicecontract.
[ServiceContract(Namespace="http:
//Microsoft.ServiceModel.Samples")]
publicinterfaceICalculator
{
[OperationContract]
doubleAdd(doublen1,doublen2);
[OperationContract]
doubleSubtract(doublen1,doublen2);
[OperationContract]
doubleMultiply(doublen1,doublen2);
[OperationContract]
doubleDivide(doublen1,doublen2);
}
//Step1:
Createserviceclassthatimplementstheservicecontract.
publicclassCalculatorService:
ICalculator
{
//Step2:
Implementfunctionalityfortheserviceoperations.
publicdoubleAdd(doublen1,doublen2)
{
doubleresult=n1+n2;
Console.WriteLine("ReceivedAdd({0},{1})",n1,n2);
//Codeaddedtowriteoutputtotheconsolewindow.
Console.WriteLine("Return:
{0}",result);
returnresult;
}
publicdoubleSubtract(doublen1,doublen2)
{
doubleresult=n1-n2;
Console.WriteLine("ReceivedSubtract({0},{1})",n1,n2);
Console.WriteLine("Return:
{0}",result);
returnresult;
}
publicdoubleMultiply(doublen1,doublen2)
{
doubleresult=n1*n2;
Console.WriteLine("ReceivedMultiply({0},{1})",n1,n2);
Console.WriteLine("Return:
{0}",result);
returnresult;
}
publicdoubleDivide(doublen1,doublen2)
{
doubleresult=n1/n2;
Console.WriteLine("ReceivedDivide({0},{1})",n1,n2);
Console.WriteLine("Return:
{0}",result);
returnresult;
}
}
}
Nowtheservicecontractiscreatedandimplemented.Buildthesolutiontoensuretherearenocompilationerrorsandthenproceedto Howto:
HostandRunaBasicWindowsCommunicationFoundationService toruntheservice.Fortroubleshootinginformation,see TroubleshootingtheGettingStartedTutorial.
CompilingtheCode
Ifyouareusingacommand-linecompiler,youmustreferencethe System.ServiceModel assembly.
IfyouareusingVisualStudio,ontheBuildmenuclickBuildSolution(orpressCTRL+SHIFT+B).
Howto:
HostandRunaBasicWindows
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WCF from MSDN