在程序中调用某个 WCF Services 一般按照如下步骤进行:
生成对应 Service 的代理类。
程序创建该代理类实例,访问指定方法。
生成代理类
可通过在 Visual Studio 中针对某个项目右键菜单中选择添加服务引用的方式来生成代理类。但是这种方式不便设定参数以及删除额外生成的 ServiceReferences.ClientConfig 文件,所以我们一般采用命令行方式。
生成
针对 Silverlight 应用程序,一般采用如下命令行
@ECHO OFF @ECHO 生成代理类... "C:Program Files (x86)Microsoft SDKsSilverlightv5.0ToolsSlSvcUtil.exe" http://servername/ServiceUrl /edb /n:"*,Sunlight.Silverlight.Dms" /r:"C:Program Files (x86)Microsoft Silverlight5.1.20125.0System.Windows.dll" /o:ServiceClient.cs DEL ServiceReferences.ClientConfig
应根据实际情况调整所访问的 WCF Service 地址(http://servername/ServiceUrl)、默认命名空间(Sunlight.Silverlight.Dms)以及生成的 Client文件地址(ServiceClient.cs)。关于 SlSvcUtil.exe 的详细解释请参见 Using SLsvcUtil.exe to Access a Service 。
调整
代理类需要将当前网站指定为默认的 WCF Service 访问地址并采用网站目前所使用的协议,这里需要人工调整。(ServiceClient 应调整为代理类的类名)
删除 ServiceClient 类的非空参数的构造函数。
调整 ServiceClient 类的空参数的构造函数如下
public ServiceClient() : base(new BasicHttpBinding(Application.Current.Host.Source.Scheme == Uri.UriSchemeHttps ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None), new EndpointAddress(Utils.MakeServerUri("/ServiceUrl"))) {