网站建设业务的销售人员培训文档,江宁网站建设方案,排名做网站优化,瀑布流 网站 php 源码2013-02-02 05:57 by jv9, 1763 阅读, 3 评论, 收藏, 编辑 去年12月收到一位朋友的邮件#xff0c;咨询Silverlight使用WCF服务#xff0c;应用部署后一直无法访问的问题#xff0c;通过几次交流#xff0c;才发现在他的项目中#xff0c;全部使用静态URL作为WCF服务的End…2013-02-02 05:57 by jv9, 1763 阅读, 3 评论, 收藏, 编辑 去年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都是指向本地。 configurationsystem.serviceModelbindingsbasicHttpBindingbinding nameBasicHttpBinding_ProxyService maxBufferSize2147483647maxReceivedMessageSize2147483647security modeNone //bindingbinding nameBasicHttpBinding_WidgetService maxBufferSize2147483647maxReceivedMessageSize2147483647security modeNone //binding/basicHttpBinding/bindingsclientendpoint addresshttp://localhost/WCFTest/Proxy.svcbindingbasicHttpBinding bindingConfigurationBasicHttpBinding_ProxyServicecontractWCFTestProxy.ProxyService nameBasicHttpBinding_ProxyService /endpoint addresshttp://localhost/WCFTest/Widget.svcbindingbasicHttpBinding bindingConfigurationBasicHttpBinding_WidgetServicecontractWCFTestWidgetService.WidgetService nameBasicHttpBinding_WidgetService //client/system.serviceModel
/configuration 为了实现动态设置Endpoint下面将创建一个辅助类DynamicEndpointHelper public class DynamicEndpointHelper
{// BaseUrl是部署服务的Web服务器地址private const string BaseUrl http://localhost/WCFTest/;public 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 new EndpointAddress(DynamicEndpointHelper.ResolveEndpointUrl(service.Endpoint.Address.Uri.ToString(),App.Current.Host.Source.ToString()));return service;
} 在创建完成代理客户端服务后Endpoint地址将指向当前运行的Web地址。值得注意的是该方法仅能支持应用与服务在相同域中如果服务在不同的域中必须进行跨域设置才能完成动态设置。 转自http://www.cnblogs.com/jv9/archive/2013/02/02/2889738.html 转载于:https://www.cnblogs.com/zxbzl/p/4284388.html