当前位置: 移动技术网 > IT编程>开发语言>.net > Silverlight动态设置WCF服务Endpoint

Silverlight动态设置WCF服务Endpoint

2018年10月25日  | 移动技术网IT编程  | 我要评论

h成人,灌篮高手全国大赛篇,贱妇当自强


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.s"                 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地址。值得注意的是,该方法仅能支持应用与服务在相同域中,如果服务在不同的域中,必须进行跨域设置才能完成动态设置。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网