Silverlight中动态获取Web Service地址
更新时间:2009年11月24日 18:47:24 作者:
开发过Silverlight应用的朋友们相信都会遇到这样一个问题
在使用WCF或者WS进行数据库操作的时候都需要有一个明确的服务地址,如果是WCF就是svc文件地址。初学者通常会直接使用VS的Add Service Reference来添加引用。这的确是十分方便的手段,但是这样会带来什么样的麻烦呢?
第一,在开发的阶段一旦改变了WS文件的目录结构就必须改变SL工程中的WS地址,而且这种改变并不是单纯的Update Service Reference这么简单,因为地址已经改变了,你必须删掉旧的Reference来添加新的Reference,这是其一。
第二, 当项目开发完成要部署上去服务器时大问题就来了。如果在开发的时候是用VS的Add Service Reference来添加引用的话,系统会自动生成一个ServiceReferences.ClientConfig的配置文件,里面记录着WS的地址和缓存、连接时长之类的信息,要命的是这个配置文件是连同SL工程一并打包进xap文件里面的,也就是说一旦项目部署到了服务器上之后就不能再改WS的地址了。这对项目的迁移,服务器IP地址的变动都带来十分不利的影响。
这里介绍一种动态获取WS地址的方法,这种方法不依赖于 ServiceReferences.ClientConfig文件。虽然说不依赖于配置文件,但是开发者仍然需要使用VS的Add Service Reference来添加一次引用,用于生成SL端的操作代码。好了,进入正题,下面是用于生成WSClient的类
public class ServiceUtil
{
public static string SVCPath { set; get; }
///
/// Get Data Service path
///
/// path
public static WorkflowServiceClient GetDynamicClient()
{
if (SVCPath == null)
throw new Exception("Wrong SVC Path!");
BasicHttpBinding binding = new BasicHttpBinding(Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase) ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);
binding.MaxReceivedMessageSize = int.MaxValue;
binding.MaxBufferSize = int.MaxValue;
return new WorkflowServiceClient(binding, new EndpointAddress(new Uri(Application.Current.Host.Source, SVCPath)));
}
}
上面ServiceUtil类中有一个静态的字符串变量,用来保存WS文件路径;然后下面的GetDynamicClient方法就是把SL应用的宿主网站uri与WS文件路径组合起来形成完整的WS引用URL。这里这个静态变量SVCPath通常是在使用WS操作前赋值,而具体的值可以通过网站Web.config文件的appsetting中字段中传过来,至于怎么在SL工程中获取aspx页面的参数的问题,我在上一篇随笔中有写到,大家可以参考一下。
相关文章
这篇文章主要介绍了jQuery实现倒计时跳转的例子,需要的朋友可以参考下2014-05-05
在TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现。以下是Bind方法的格式,Eval的格式也是和Bind一样的。 Bind("列的名称","显示的格式文")2009-06-06
这篇文章主要介绍了ASP.NET配置文件Web.config用法,详细解读了Web.config配置文件各个节点的含义及用法,需要的朋友可以参考下2014-10-10
本文主要介绍利用aspnet_regiis.exe工具对web.config中connectionStrings节点进行加密和解密的过程,希望对大家有所帮助。2016-05-05
最近不得不对这个论坛进行研究,以适应后面的发展,现在同事研究太吃力了,以后改些东西,估计又要...打开web项目中的communityserver.config发现一个有趣的地方。2009-03-03
js .net验证控件的代码2008-12-12
这篇文章主要为大家详细解析了.NET MD5加密解密代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-02-02
本篇文章是对.Net 4.0 中委托delegate的使用进行了详细的分析介绍,需要的朋友参考下2013-05-05
这篇文章主要介绍了ASP.NET中为GridView添加删除提示框的方法,可实现非常人性化的删除提示功能,需要的朋友可以参考下2015-06-06
如同交响乐一样,构造软件系统不一定必须某个强大的明星驱动,我们站在历代ADO.NET的肩膀上,更好地回归到SQL Server的核心开发:SQL Server LocalDB 在 ASP.NET中的应用2013-01-01
最新评论