当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Silverlight中动态获取Web Service地址

ASP.NET
用 Asp.Net 建立一个在线 RSS 新闻聚合器的方法
关于前台调用后台事件__doPostBack函数
Bin 和 App_Code 文件夹介绍
.NET 2.0 的压缩功能代码
解决Visual Studio 2005 无法显示设计视图的方法
asp.net(c#)两种随机数的算法,可用抽考题
asp.net下url传递中文的解决方案
XmlReader 读取器读取内存流 MemoryStream 的注意事项
asp.net下创建、查询、修改带名称空间的 XML 文件的例子
使用.NET存储XML数据的方法
XslTransform.Transform将结果输出到字符串里的方法
安装 VS2005 SP1 有关问题的解决办法
asp.net下中文验证码,免费开源代码
自定义应用程序配置文件(app.config)
asp.net下使用DIME协议上传文件
动态改变ASP.net页面标题和动态指定页面样式表的方法
WEB上调用HttpWebRequest奇怪问题的解决方法
HTTP协议下用Web Service上传大文件的解决方案
asp.net下Response.ContentType类型汇总
ASP.NET User Control使用技巧一则

ASP.NET 中的 Silverlight中动态获取Web Service地址


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-10   浏览: 155 ::
收藏到网摘: n/a

开发过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; }
/// <summary>
/// Get Data Service path
/// </summary>
/// <returns>path</returns>
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页面的参数的问题,我在上一篇随笔中有写到,大家可以参考一下。