动态配置Silverlight调用WCF

动态配置Silverlight调用WCF,第1张

概述 去年12月收到一位朋友的邮件,咨询Silverlight使用WCF服务,应用部署后一直无法访问的问题,通过几次交流,才发现在他的项目中,全部使用静态URL作为WCF服务的Endpoint地址,后来修改为动态地址后,问题解决。本篇简单介绍如何创建动态WCF Endpoint。 Silverlight项目中通过WCF服务进行客户端与服务器端数据交互,其方法是在Silverlight客户端添加服务 

去年12月收到一位朋友的邮件,咨询Silverlight使用WCF服务,应用部署后一直无法访问的问题,通过几次交流,才发现在他的项目中,全部使用静态URL作为WCF服务的Endpoint地址,后来修改为动态地址后,问题解决。本篇简单介绍如何创建动态WCF Endpoint。

Silverlight项目中通过WCF服务进行客户端与服务器端数据交互,其方法是在Silverlight客户端添加服务引用(Service Reference),Silverlight会在客户端项目中生成一个名为ServiceReference.ClIEntConfig的配置文件。该配置文件中包含有WCF服务的Endpoint URL地址,而该地址将指引Silverlight客户端服务请求到对应服务器端服务接口。默认情况下,客户端生成的Endpoint地址为localhost,当应用发布时,该地址将随着Web服务器的配置不同而改变。

作为默认设置,每次Web服务器配置切换,开发人员不得不手动修改WCF服务配置,Silverlight应用无法完全依赖于ServiceReference.ClIEntConfig配置。这样不仅增加了维护成本,而且为代码维护添加难度。 

首先在项目中添加WCF服务,Silverlight 默认生成ServiceReference.ClIEntConfig文件,从配置文件中可以看出,Endpoint都是指向本地。

 

<configuration>    system.serviceModel>        bindings>            basichttpBinding>                binding name="BasichttpBinding_ProxyService" maxBufferSize="2147483647"                     maxReceivedMessageSize="2147483647">                    security mode="None" />                </binding="BasichttpBinding_WidgetService"clIEntendpoint address="http://localhost/WCFTest/Proxy.svc"                 binding="basichttpBinding" bindingConfiguration                 contract="WCFTestProxy.ProxyService" name="BasichttpBinding_ProxyService" />            ="http://localhost/WCFTest/Widget.svc"="WCFTestWidgetService.WidgetService"="BasichttpBinding_WidgetService" />        >>

 

为了实现动态设置Endpoint,下面将创建一个辅助类DynamicEndpointHelper,

public class DynamicEndpointHelper { @H_301_124@// BaseUrl是部署服务的Web服务器地址 private const string BaseUrl = "http://localhost/WCFTest/"; static string ResolveEndpointUrl(string endpointUrl,string xapPath) { string baseUrl = xapPath.Substring(0,xapPath.IndexOf(ClIEntBin)); string relativeEndpointUrl = endpointUrl.Substring(BaseUrl.Length); string dynamicEndpointUrl = baseUrl + relativeEndpointUrl; return dynamicEndpointUrl; } }

而在Silverlight客户端,可以通过后台代码实现动态设置Endpoint,

private WCFTestProxy.ProxyServiceClIEnt GetProxyService() { WCFTestProxy.ProxyServiceClIEnt service = new WCFTestProxy.ProxyServiceClIEnt(); service.Endpoint.Address = EndpointAddress( DynamicEndpointHelper.ResolveEndpointUrl(service.Endpoint.Address.Uri.ToString(),App.Current.Host.source.ToString())); service; }

在创建完成代理客户端服务后,Endpoint地址将指向当前运行的Web地址。值得注意的是,该方法仅能支持应用与服务在相同域中,如果服务在不同的域中,必须进行跨域设置才能完成动态设置。

@H_419_202@本文出自 “Kevin Fan” 博客,请务必保留此出处http://www.voidcn.com/article/p-qlznecvg-bke.html

总结

以上是内存溢出为你收集整理的动态配置Silverlight调用WCF全部内容,希望文章能够帮你解决动态配置Silverlight调用WCF所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1009078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存