Silverlight引用WebService时取消对ServiceReferences.ClientConfig文件的依赖

本文介绍了一种通过代码构造WebService的EndPoint、Binding等信息,替代ServiceReferences.ClientConfig文件的方法,以简化Silverlight项目上线过程中的配置修改步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做过Silverlight项目的朋友都知道一般来说我们在Silverlight项目中都需要引用WebService或是WCF,引用的方式是在Visual Studio窗口中通过“添加服务引用”来添加引用,这时Visual Studio会生成一个 ServiceReferences.ClientConfig 配置文件,这个文件中存储了WebService的地址,绑定等信息,我们在Silverlight中实例化WebService的代理类时需要用到这个文件,没有这个文件WebService代理类的实例化就会失败。

使用ServiceReferences.ClientConfig的方式来实例化WebService代理类比较简单,但是也有一个缺点,就是每次将Silverlight项目上线时都需要手工打开生成的XAF包,将ServiceReferences.ClientConfig文件中的WebService地址从http://Localhost/YourProject/YourWebService.asmx的形式改为http://YourDomain/YourProject/YourWebService.asmx,如果某次你忘记了修改,可能会导致你的Siverlight项目在线上无法正常运行。那么有没有一种简单的方式让我们不需要每次上线都修改ServiceReferences.ClientConfig文件,让我们摆脱对ServiceReferences.ClientConfig的信赖呢?下面就说一下我的实现方式。

实现原理很简单,就是在一个类里手工的构造WebService的EndPoint, Binding等信息,将ServiceReferences.ClientConfig的作用用代码来代替,示例实现代码如下,代码很简单,各位一看就明白。

///<summary>
/// 得到WebService对象
 /// 以后实例化WebService代理时请用var serviceClient = Utility.GetDesignerServiceInstance();的形式,
    ///     不要再用默认的 var serviceClient = new WSDesignerSoapClient();
    /// 后一种形式会报错,因为我们删除了ServiceReferences.ClientConfig文件
    ///</summary>
    ///<returns></returns>
        public static WSDesignerSoapClient GetDesignerServiceInstance()
        {
            var basicBinding = new BasicHttpBinding() { MaxBufferSize = int.MaxValue, MaxReceivedMessageSize = int.MaxValue, Name = "WSDesignerSoap" };
            basicBinding.Security.Mode = BasicHttpSecurityMode.None;
            var endPoint = new EndpointAddress(getHostUrl() + "/WebService.asmx");
            var ctor =
                typeof (WSDesignerSoapClient).GetConstructor(new Type[] {typeof (Binding), typeof (EndpointAddress)});
            return (WSDesignerSoapClient) ctor.Invoke(new object[] {basicBinding, endPoint});
        }


     ///<summary>
    /// 得到当前所在网站的根目录,如Http://localhost/flow
    /// 注意站点名字必须是Flow,否则会报错。
    ///</summary>
    ///<returns></returns>
        private static  string getHostUrl()
        {
            var location = (HtmlPage.Window.GetProperty("location")) as ScriptObject;
            var hrefObject = location.GetProperty("href");
            string url = hrefObject.ToString().Substring(0, hrefObject.ToString().IndexOf("Flow/") + 5);
            return url;
        }

 

转载于:https://www.cnblogs.com/yshuaiw/p/3252382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值