微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用svcutil.exe生成代理代码

25.9 构建WCF客户应用程序

现在已经设置好主机,最后一个任务是构建用于与这个WCF服务类型通信的软件部分。虽然可以手动执行大量工作并构建必要的基础结构(可行但需要大量劳动的任务),但是.NET Framework 3.5 SDK提供了一些方法快速生成客户端代理。首先,创建名为MagicEightBallServiceClient的新控制台应用程序。

25.9.1 使用svcutil.exe生成代理代码

构建客户端代理的第一种方法是通过Visual Studio 2008命令提示符使用svcutil.exe命令行工具。通过使用svcutil.exe,可以生成表示代理代码自身以及客户端配置文件的新VB语言文件。为了执行该操作,只需要指定作为第一个形参的服务端点。/language:标记允许指定希望生成VB代码(而不是认的C#代码)。/out:标记用于定义包含代理的*.vb文件名称,而/config:选项指定生成的客户端*.config文件名称

假设您的服务当前正在运行,传入svcutil.exe的如下命令集将在工作目录中生成两个新的文件(当然,该命令集在Visual Studio 2008命令提示符中应该作为一行输入):

 
 
  1. svcutilhttp://localhost:8080/MagicEightBallService
  2. /language:VB/out:myProxy.vb/config:app.config

如果打开myProxy.vb文件,就会看到IEightBall接口的客户端表示,以及作为代理类的名为EightBallClient的新类。该类派生自泛型类System.ServiceModel.ClientBase(Of T),其中T是已注册的服务接口(也就是IEightBall)。

除了许多自定义的构造函数之外,将会实现服务接口中使用<OperationContract()>属性修饰的每个方法,从而委托给父类的Channel特性以调用正确的外部方法。下面是该代理类型的部分代码

 
 
  1. <System.Diagnostics.DebuggerStepThroughAttribute(),_
  2. System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel",_
  3. "3.0.0.0")>_
  4. PartialPublicClassEightBallClient
  5. InheritsSystem.ServiceModel.ClientBase(OfIEightBall)
  6. ImplementsIEightBall
  7. ...
  8. PublicFunctionObtainAnswerToQuestion(ByValuserQuestionAsString)_
  9. AsStringImplementsIEightBall.ObtainAnswerToQuestion
  10. ReturnMyBase.Channel.ObtainAnswerToQuestion(userQuestion)
  11. EndFunction
  12. EndClass

在创建该代理类型的实例时,基类将使用在客户端应用程序配置文件中指定的设置建立端点的连接。非常类似于服务器端的配置文件生成的客户端App.config文件包含<endpoint>元素和用于与服务通信的basicHttpBinding的相关细节。

此外,您将看到如下的<client>元素,该元素再次从客户的角度建立ABC:

 
 
  1. <client>
  2. <endpoint
  3. address="http://localhost:8080/MagicEightBallService"
  4. binding="basicHttpBinding"bindingConfiguration="BasicHttpBinding_IEightBall"
  5. contract="IEightBall"name="BasicHttpBinding_IEightBall"/>
  6. </client>

到目前为止,可以在项目中包括这两个文件(以及引用System.ServiceModel.dll程序集),并且使用代理类型与远程WCF服务通信。然而,此处并没有这样做,而是介绍Visual Studio 2008如何帮助进一步自动化客户端代理文件的创建。

原文地址:https://www.jb51.cc/vb/262434.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐