Silverlight中的ServiceReferences.ClientConfig

转载 2012年03月26日 18:46:14
        做过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项目在线上无法正常运行。

        实现原理很简单,就是在一个类里手工的构造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;
       }

PS:本文在写作中参考了:[Silverlight]摆脱对 ServiceReferences.ClientConfig 的依赖

  本文来自张荣华的博客,原文地址:http://www.cnblogs.com/zhangronghua/archive/2011/11/22/SilverlightRemoveConfigDependency.html



Silverlight 运行原理 解析综合版(二)

Silverlight 运行原理 解析综合版(二) 2011-10-09 21:05 by 沐海, 564 阅读, 0 评论, 收藏,  编辑 几种RIA技术 Silverlig...
  • david_xgl
  • david_xgl
  • 2014年08月29日 18:31
  • 921

silverlight学习之路(1)创建 RIA Services 解决方案

学习过程真的很悲剧啊! 开发工具:VS2012+silverlight5
  • duyelang
  • duyelang
  • 2014年07月22日 14:50
  • 811

silverlight根据json字符串动态创建实体类

1、接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json);...
  • mutou965175859
  • mutou965175859
  • 2015年07月10日 13:22
  • 1663

Silverlight管理系统-源代码(SilverlightOA开发框架主要提供二次开发)

 Silverlight OA系统简介 系统功能简介 l 程序界面介绍: 左侧为主菜单,主菜单可以展开和收起,主菜单下面的所有模块都可以在数据库中扩展增加,模块的权限和用户角色挂钩,可以在...
  • dotfun
  • dotfun
  • 2014年05月14日 14:38
  • 7999

完美实现Silverlight动态加载

这段时间利用项目空隙,研究了一下Silverlight的动态加载技术。动态加载分为两种: 1、网页局部加载(即一个网页上有多个Silverlight应用) 2、单个Silverlight应用动态加...
  • Andeewu
  • Andeewu
  • 2013年11月18日 22:44
  • 1273

Silverlight 控件的ToolTip封装工具使用

在Silverlight项目开发中,控件可以设置鼠标移入时的手势,同样还可以设置ToolTip,利用Silverlight编写代码或者Blend设计工具均可以设置ToolTip,但都是一些文字提示,如...
  • taomanman
  • taomanman
  • 2015年08月27日 09:52
  • 1242

Silverlight实现文件的下载[很简单]

思路:使用HyperlinkButton的NavigateUri属性来访问ashx程序,来实现文件下载。 一. 新建一个Silverlight应用程序 在web项目所在的目录下新建名为Files的...
  • dangercheng
  • dangercheng
  • 2013年11月25日 16:54
  • 2874

更新Silverlight 后 无法启动调试 未安装Silverlight developer 运行时解决办法

更新Silverlight 后 无法启动调试 未安装Silverlight developer 运行时解决办法 时间:2012-08-14 18:27来源:博客园 作者:风_铃 点击: 883次 ...
  • fxhflower
  • fxhflower
  • 2013年09月17日 10:42
  • 5060

Silverlight下载网络图片

话说Silverlight做下载的时候是一个很麻烦的事情,刚开始的时候使用WebClient去下载图片,这样只能下载本域下的图片资源,不能跨域。 比如http://www.baidu.com/a.jp...
  • qq873113580
  • qq873113580
  • 2013年01月17日 17:03
  • 1173

Win10安装silverlight5开发环境,以及坑

写在开头的话 最近因为一个项目使用silverlight5开发的, 这之前偶尔好像听说过silverlight,但是一直以为是微软的源码管理工具呢,汗… 经过几天了解才知道是微软自己的富客户端开发语言...
  • wantbar
  • wantbar
  • 2017年08月06日 09:51
  • 1896
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Silverlight中的ServiceReferences.ClientConfig
举报原因:
原因补充:

(最多只允许输入30个字)