Silverlight动态设置WCF效劳Endpoint51CTO博客 - 乐橙lc8

Silverlight动态设置WCF效劳Endpoint51CTO博客

2019-01-03 17:04:30 | 作者: 翠彤 | 标签: 效劳,动态,设置 | 浏览: 1377

 

上一年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>
                <binding name="BasicHttpBinding_WidgetService" maxBufferSize="2147483647"                     maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost/WCFTest/Proxy.svc"                 binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ProxyService"                 contract="WCFTestProxy.ProxyService" name="BasicHttpBinding_ProxyService" />
            <endpoint address="http://localhost/WCFTest/Widget.svc"                 binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_WidgetService"                 contract="WCFTestWidgetService.WidgetService" name="BasicHttpBinding_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地址。值得注意的是,该办法仅能支撑运用与效劳在相同域中,假如效劳在不同的域中,有必要进行跨域设置才干完结动态设置。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章