热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Silverlight中动态获取WebService地址

开发过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页面的参数的问题,我在上一篇随笔中有写到,大家可以参考一下。
推荐阅读
  • 探索Squid反向代理中的远程代码执行漏洞
    本文深入探讨了在网站渗透测试过程中发现的Squid反向代理系统中存在的远程代码执行漏洞,旨在帮助网站管理者和开发者了解此类漏洞的危害及防范措施。 ... [详细]
  • Linux网络安装指南
    本文详细介绍了如何通过网络安装Linux操作系统,包括必要的服务配置和常见问题解决方法,旨在帮助IT专业人士提高系统部署效率。 ... [详细]
  • TCP/IP基础知识详解
    本文详细介绍了TCP/IP协议的基本概念,包括网络层次模型、TCP三次握手过程、四次挥手过程以及TCP与UDP的比较。通过这些内容,读者可以更好地理解TCP/IP协议的工作原理。 ... [详细]
  • 修改Linux登录欢迎信息
    编辑etcmotd文件(没有自己创建即可)▽_.._,------------.,'`.(HelloBoy!)__)__`\`-,----------'((`- ... [详细]
  • 本文详细介绍了如何在 Mac OS 上设置罗技 M590 鼠标的步骤,包括所需软件及具体操作。 ... [详细]
  • 本文将详细介绍小蚁智能行车记录仪的各项性能,包括其1296P高清分辨率的实际表现及ADAS辅助驾驶系统的功能测试。通过白天、夜晚及低光环境下的视频测试,全面评估这款设备的实用性。 ... [详细]
  • 本文将详细介绍如何在Bootstrap 5中使用五种不同的表单控件样式,包括输入框、选择器和文本区域等元素。 ... [详细]
  • 本文详细解读了RTCP协议中的SR(Sender Report)包,特别是首次发送的SR包。通过具体实例和RFC 3550标准文档,全面解析SR包的结构与字段含义。 ... [详细]
  • 本文探讨了如何在TWiki中配置自定义标记,以实现特定字符串(如#12345)自动转换为指向票务系统的超链接。此功能类似于在其他平台上的实现,旨在提高信息检索效率。 ... [详细]
  • 本文详细介绍了DNU(每日新增用户数)、DAU(每日活跃用户数)以及DOU(每日老用户数)的概念,并探讨了DNU/DAU比率在游戏开发中的重要性及其对游戏留存率的影响。通过具体案例分析,展示了如何利用这一比率来评估游戏的市场表现和用户粘性。 ... [详细]
  • 正则表达式是一种强大的文本匹配工具,但在不当使用时,也可能成为安全漏洞的源头,特别是当它们被恶意利用以触发拒绝服务(DoS)攻击时。本文将深入探讨正则表达式如何成为攻击者的目标,并提供防范策略。 ... [详细]
  • AngularJS在IE7中的兼容性解决方案
    本文探讨了在较旧版本的Internet Explorer(如IE7)中使用AngularJS时遇到的问题及解决方法,包括HTML标签的正确书写方式以及如何添加对JSON的支持。 ... [详细]
  • NTC395010K热敏电阻温度传感器详解
    本文详细介绍了NTC395010K温度传感器的工作原理及计算方法,包括热敏电阻与上拉电阻的分压电路设计,以及如何通过ADC值计算温度的具体步骤。 ... [详细]
  • window下kafka的安装以及测试
    目录一、安装JDK(需要安装依赖javaJDK)二、安装Kafka三、测试参考在Windows系统上安装消息队列kafka一、安装JDKÿ ... [详细]
  • MainActivityimportandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;im ... [详细]
author-avatar
念毅掷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有