Silverlight中动态获取Web Service地址

2015-03-10  来源:本站原创  分类:实用技巧  人气:2 

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

相关文章
  • Silverlight中动态获取Web Service地址 2015-03-10

    开发过Silverlight应用的朋友们相信都会遇到这样一个问题 在使用WCF或者WS进行数据库操作的时候都需要有一个明确的服务地址,如果是WCF就是svc文件地址.初学者通常会直接使用VS的Add Service Reference来添加引用.这的确是十分方便的手段,但是这样会带来什么样的麻烦呢? 第一,在开发的阶段一旦改变了WS文件的目录结构就必须改变SL工程中的WS地址,而且这种改变并不是单纯的Update Service Reference这么简单,因为地址已经改变了,你必须删掉旧的Re

  • java获取web容器地址的方法 2014-12-27

    java获取web容器地址的方法,需要的朋友可以参考一下 tomcat本地地址 E:\soft4develop\apache-tomcat-6.0.18 System.getProperty("user.dir")//E:\soft4develop\apache-tomcat-6.0.18\bin System.getProperty("catalina.home")//E:\soft4develop\apache-tomcat-6.0.18对于jboss同样适用.

  • Python中动态获取对象的属性和方法的教程 2015-04-21

    本文主要介绍了如何在Python中动态获取对象的属性和方法,并运行使用它们,需要的朋友可以参考一下 首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding: UTF-8 import sys # 模块,sys指向这个模块对象 import inspect def foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name =

  • Java中动态获取项目根目录的绝对路径 2013-11-01

    在开发过程中经常会用到读写文件,其中就必然涉及路径问题.使用固定的绝对路径当然很方便,但会导致程序的可移植性差,比如在代码中写死了要在E盘建一个文件,而移植后的环境中木有E盘,那就只能改代码:又或者需要调用D盘某某某很长路径下的一个自定义文件,这个文件路径又不在项目文件夹下,则拷项目代码时很容易遗漏这个自定义文件,这样给项目的交接带来了不必要的麻烦.如果我们将自定义配置文件或者其他待访问的文件都放在项目根目录下的某个文件夹中,在运行时动态获取项目根目录,则能大大提升项目的可移植性.注意,Tomc

  • 在asp.net2.0中使用Jquery调用Web Service[附源代码] 2012-03-09

    代码:/Files/zhuqil/JSONDemo.zip 介绍: 我们都知道,默认情况下,一个asp.net Web Service 返回的数据格式是XML的,处理XML数据总是会花费一些开销,最近,另外一种JSON的格式非常流行并且能够克服这些问题.从.NET 3.5起,微软在ASP.NET 3.5提供了处理JSON内置功能,但是现在很多应用程序还是运行在Asp.net2.0下.我将向你显示如何简单的返回JSON格式的数据从一个Web Service上,并使用Jquery来处理他,Jquer

  • 使用XFire+Spring构建Web Service 2014-06-26

    XFire是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用. 相对于Axis来说,目前XFire相对受欢迎,加上其提供了和Spring集成的支持,在目前的Web Service开源社区拥有众多的追随者.并且因为XFire为Spring提供的支持,使得我们可以很容易在Spring中使用XFire构建Web Service应用. XFire与Axis2相比具有如下特征: l 支持一系列W

  • 高性能Web Service数据库编程 2012-03-09

    简介:... 1 启用ATL Server的Data Source Cache支持... 1 实现数据库的交互... 2 创建ATL OLEDB使用者类... 2 提供插入记录的能力... 2 创建数据源连接对象... 3 使用UDL文件代替连接字符串... 4 Web Service调试... 4 性能评测... 5 简介: ATL Server是性能很高的Web Application和Web Service的开发类库.到目前为止,我认为如果应用程序要和数据库交互,性能最高的办法是使用OLE

  • 动态获取复选框checkbox选中个数的jquery代码 2014-06-25

    这篇文章主要介绍了jquery中动态获取复选框checkbox选中的个数的实现代码,需要的朋友可以参考下 今天碰到"jquery动态获取复选框checkbox选中的个数",首先看下面例子: <input type="checkbox" checked="checked">python<br> <input type="checkbox" checked="checked">

  • Atlas学习手记(8):调用本地Web Service简单介绍 2015-03-06

    Atlas对于调用Web Service作了很好的封装,使得我们用JS调用Web Service的工作变得非常的简单,只需要使用WebServiceName.WebMethod()就可以完成调用.本文将通过两个简单的例子来说明这一内容. 主要内容 1.调用简单的Web Service 2.传递复杂类型的数据 Atlas对于调用Web Service作了很好的封装,使得我们用JS调用Web Service的工作变得非常的简单,只需要使用WebServiceName.WebMethod()就可以完成

  • web应用中动态部分的java和cgi实现原理的简单总结 2012-05-06

    一.初始web 最初知道网站是用html写的,静态的,会动的那个显示效果,内容完全没变,只是有时候移动了,有时候隐藏了. 这个时候,我认为: 浏览器是一个html的解释器和http的解释器的合体. 服务器是一个接收http请求,并可以根据请求中指定的文件(无论是地址栏写的,还是超链接发送的)找到服务器对应的文件,把文件中的内容以http的格式返回给浏览器. 不过听说表单是可以提交给后台处理的,也就是内容可以根据人工输入而改变的.但是这个过程一直不知道是什么样. 二.java的动态网站 后来学习了

  • 说说Web Service中REST vs RPC 的联系和区别 2014-06-19

    这两种我的理解是 RPC常用的soap ,REST常用的http(这俩名字太唬人) 摘要 Web Service 已经不再新鲜, 而随后的 SOA, Cloud Computing 也不断出现, 直到百度也 提出了自己的 框计算, 我们尚且不管这些时髦的名词背后所蕴藏的实际的技术创新有多少, 但是他们终究是逃不出一点, 即 如何解决访问服务的问题, 而此处的服务通常不在本地而是在遥远的你不知道的美国或者印度. 本文想阐述标题中提到的两种解决远程服务访问的方法,优缺点及其一些实际的建议等. Con

  • asp中获取当前页面的地址与参数的函数代码 2015-01-01

    asp中获取当前页面的地址与参数的函数代码,经常需要用得到,特整理下,方便需要的朋友. Function getCurrentUrl() On Error Resume Next Dim strTemp If LCase(Request.ServerVariables("HTTPS")) = "off" Then strTemp = "http://" Else strTemp = "https://" End If strT

  • 构建REST风格的Web Service 2013-05-28

    1.什么是REST? REST 是由 Roy Fielding 在他的论文<Architectural Styles and the Design of Network-based Software Architectures>中提出的一个术语. REST 是英文 Representational State Transfer 的缩写,有中文翻译为"具象状态传输"(参考:<SIP/IMS网络中的Representational State Transfer (REST

  • Web Service 接口安全与解决方案 2013-11-22

    12.7.1. 接口安全问题 来源IP控制,即黑白名单,获取IP地址需要考虑X Forward for IP计数器,单位时间内IP访问次数达到阀值,就提示稍后连接 用户名密码认证 动态验证码 证书加密 md5/sha1 数字摘要 校验 SSL / TSL 证书加密 12.7.2. 访问接口协议 机遇http的实现方式有下面几种. http协议传统post/get 方式 soap 简单对象访问协议 xmlrpc 机遇xml的协议 json 近年来兴起的一种数据序列化传输方法 http无状态协议,不

  • Web Service 那点事儿(1) 2014-07-01

    Web Service,即"Web 服务",简写为 WS,从字面上理解,它其实就是"基于 Web 的服务".而服务却是双方的,有服务需求方,就有服务提供方.服务提供方对外发布服务,服务需求方调用服务提供方所发布的服务.其实也就是这些了,没有多少高大上的东西. 本文将从实战的角度,描述使用 Java 开发 WS 的工具及其使用过程. 如果说得再专业一点,WS 其实就是建立在 HTTP 协议上实现异构系统通讯的工具.没错!WS 说白了还是基于 HTTP 协议的,也就是说

  • 通向架构师的道路(第十三天)Axis2 Web Service安全初步 2015-01-14

    一.WSSecurity简述 安全的Web服务是Web服务成功的必要保证.但大家都知道,Web服务使用XML来进行数据交换,而XML在默认情况下是明文编码的:同时,大部分Web服务使用HTTP协议作为传输协议,同样,HTTP也是使用明文方式来传输数据的.这就造成了在不加密的传输协议上传输不加密的信息,从而使信息传输的保密性受到威胁.作为企业级的应用,以上的方式不能满足安全性基本要求: ² 数据在internet上传输的时侯是不应该被第三方能够看到的: ² 双方必须能够验定彼此间的来源: ² 双方

  • Java开源Web Service(转) 2012-02-20

    Axis Apache Axis 是Apache WebService项目中的子项目,其最初起源于IBM的"SOAP4J",应该属于最早的一批用于构造基于SOAP应用的Framework. 目前Apache Axis已经发展到了第三代,其核心是一个SOAP处理器,用于开发包括客户端,服务器端,SOAP Gateway等各种应用.事实上Apache Axis在了1.0版后,其发行版本还包括了完整的J2EE服务器插件, WSDL支持和生成,TCP/IP监视器等组件,从这个意义上来说Apah

  • Web Service 那点事儿(4)-- 使用 CXF 开发 REST 服务 2014-07-23

    现在您已经学会了如何使用 CXF 开发基于 SOAP 的 Web 服务,也领略了 Spring + CXF 这个强大的组合,如果您错过了这精彩的一幕,请回头看看这篇吧: Web Service 那点事儿(2) -- 使用 CXF 开发 SOAP 服务 今天我们将视角集中在 REST 上,它是继 SOAP 以后,另一种广泛使用的 Web 服务.与 SOAP 不同,REST 并没有 WSDL 的概念,也没有叫做"信封"的东西,因为 REST 主张用一种简单粗暴的方式来表达数据,传递的数据格

  • Spring MVC实现Restful Web Service 2015-01-07

    一引言: 以前一说到Web Service大家肯定会联想到SOAP,现在提到Web Service大家马上联想到RESTful,因为RESTful Web Service已经深得人心,得到重用,相比笨重的SOAP越来越流行了,那么什么是RESTful Web Service?REST英文全称为Representational State Transfer,翻译为中文即表征状态转移,是一种软件架构风格,REST关键原则为: 为所有"事物"定义ID 将所有事物链接在一起 使用标准方法 资源

  • JS获取客户端IP地址.MAC和主机名的7个方法汇总 2013-10-16

    这篇文章主要介绍了JS获取客户端IP地址.MAC和主机名的7个方法汇总,JS本身是不支持获取IP地址等信息的,本文通过其它方法实现,需要的朋友可以参考下 今天在搞JS(javascript)获取客户端IP的小程序,上网搜了下,好多在现在的系统和浏览器中的都无效,很无奈,在Chrome.FireFox中很少搞到直接利用ActiveX获取IP等的JS脚本.下面的代码是我在所有windowsNT5.0及以上的系统上都测试通过的,给出代码: 一.使用JS获取客户端IP的几个方法 方法一(只针对IE且客户