Silverlight动态设置WCF服务Endpoint
去年12月收到一位朋友的邮件,咨询Silverlight使用WCF服务,应用部署后一直无法访问的问题,通过几次交流,才发现在他的项目中,全部使用静态URL作为WCF服务的Endpoint地址,后来修改为动态地址后,问题解决。本篇简单介绍如何创建动态WCF Endpoint。
Silverlight项目中通过WCF服务进行客户端与服务器端数据交互,其方法是在Silverlight客户端添加服务引用(Service Reference),Silverlight会在客户端项目中生成一个名为ServiceReference.ClientConfig的配置文件。该配置文件中包含有WCF服务的Endpoint URL地址,而该地址将指引Silverlight客户端服务请求到对应服务器端服务接口。默认情况下,客户端生成的Endpoint地址为localhost,当应用发布时,该地址将随着Web服务器的配置不同而改变。
作为默认设置,每次Web服务器配置切换,开发人员不得不手动修改WCF服务配置,Silverlight应用无法完全依赖于ServiceReference.ClientConfig配置。这样不仅增加了维护成本,而且为代码维护添加难度。
首先在项目中添加WCF服务,Silverlight 默认生成ServiceReference.ClientConfig文件,从配置文件中可以看出,Endpoint都是指向本地。
<configuration><system.serviceModel><bindings><basicHttpBinding><binding name="BasicHttpBinding_ProxyService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"><security mode="None" /></binding><binding name="BasicHttpBinding_WidgetService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"><security mode="None" /></binding></basicHttpBinding></bindings><client><endpoint address="http://localhost/WCFTest/Proxy.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ProxyService" contract="WCFTestProxy.ProxyService" name="BasicHttpBinding_ProxyService" /><endpoint address="http://localhost/WCFTest/Widget.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_WidgetService" contract="WCFTestWidgetService.WidgetService" name="BasicHttpBinding_WidgetService" /></client></system.serviceModel> </configuration>
为了实现动态设置Endpoint,下面将创建一个辅助类DynamicEndpointHelper,
public class DynamicEndpointHelper { // BaseUrl是部署服务的Web服务器地址private const string BaseUrl = "http://localhost/WCFTest/"; public static string ResolveEndpointUrl(string endpointUrl, string xapPath) { string baseUrl = xapPath.Substring(0, xapPath.IndexOf("ClientBin")); string relativeEndpointUrl = endpointUrl.Substring(BaseUrl.Length); string dynamicEndpointUrl = baseUrl + relativeEndpointUrl; return dynamicEndpointUrl; } }
而在Silverlight客户端,可以通过后台代码实现动态设置Endpoint,
private WCFTestProxy.ProxyServiceClient GetProxyService() { WCFTestProxy.ProxyServiceClient service = new WCFTestProxy.ProxyServiceClient(); service.Endpoint.Address = new EndpointAddress( DynamicEndpointHelper.ResolveEndpointUrl(service.Endpoint.Address.Uri.ToString(), App.Current.Host.Source.ToString())); return service; }
在创建完成代理客户端服务后,Endpoint地址将指向当前运行的Web地址。值得注意的是,该方法仅能支持应用与服务在相同域中,如果服务在不同的域中,必须进行跨域设置才能完成动态设置。
Silverlight动态设置WCF服务Endpoint相关推荐
- silverlight动态创建WCF服务
最近在发布silverlight项目时,服务地址不是固定,因此服务需要动态创建.在网上搜了点资料找到了动态创建服务的方法,直接上代码 /// <summary>/// 根据服务类型创建服务 ...
- SilverLight学习笔记--WCF服务
编写WCF服务接口 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Se ...
- Silverlight与WCF之间的通信(5)silverlight应用和wcf服务的发布方法
上一篇博文中有朋友问到关于silverlight程序发布的问题,上一篇写的是silverlight访问host在console上的wcf,其实关于wcf和silverlihgt通信的问题有好几种方式, ...
- 动态调用WCF服务[转]
原文地址:http://blog.csdn.net/castlooo/archive/2010/05/06/5562619.aspx 客户端调用wcf ,有时需要动态的调用服务端的WCF中的方法,本方 ...
- 客户端动态调用WCF服务中的方法
首先要写一个执行动态调用的方法:在里面实现反射调用. public static object ExecuteMethod<T>(string pUrl,string pMethodNam ...
- 寄宿于CS程序的WCF服务
最近项目中,需要对外部程序提供服务接口,用来进行数据交互和部分设备控制.由于都是使用的.NET平台开发的,因此想到使用WCF服务.之前也用过WCF服务,但是当初使用的时候是通过IIS寄宿的,有些地方不 ...
- Silverlight与WCF之间的通信(4)silverlight以net.tcp方式调用console上寄宿的wcf服务
(由于最近是针对一个demo进行的研究,在之前公开过代码结构,这里只是对需要改动的地方加以说明) WCF4.0使得编写wcf服务不再那么复杂,去掉了许多的配置信息,客户端只需要一个服务地址,便可在系统 ...
- linux c调用wcf服务,Silverlight+WCF实现跨域调用
在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务:Silverlight扮演客户端,调用WCF提供的LoginVaild服务.思路有了,下面进行代码实现. 数据库脚本实现 新建T_Us ...
- WCF 服务端+客户端动态调用
最近在写WCF服务相关代码,把项目中用到的通讯框架做了下整理,以备以后自己记忆. WCF服务端: 包含契约定义:WCF.Contract.契约实现:WCF.Service 以及宿主主程序:WcfSer ...
最新文章
- Jackson——来自官网的翻译
- bs和cs架构的区别和优缺点_C/S和B/S两种架构区别与优缺点分析
- Model层视频播放关闭问题及手机视频播放的适配问题解决方案
- 嵌入式linux开发业内各个常用开源项目git仓库地址大全
- 如何现实CITRIX XenAPP内容重定向
- g++ 编译mysql动态库_Linux下g++编译以及使用静态库和动态库的方法详解
- python 取整_马克的Python学习笔记#数字,日期和时间
- JS键盘事件最全keycode代码
- myeclipse jsp头
- Linux 常用开关机以及7个启动级别
- Eclipse中导入maven项目 maven update project报“Cannot nest ‘xx/src/main/resources‘ inside ‘xx/src ……”
- 求素数的python程序_Python编程新手看过来,如何求素数 (Python学习教程)
- [NLP论文阅读]A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS
- matepad和鸿蒙,华为MatePadPro配置速看:搭载了鸿蒙系统的它真比iPadPro强?
- java 夏令时区_java中的夏令时
- 学习java的第十九天,static关键字、隐匿代码块的学习
- git仓库迁移(阿里云git切换到公司内部的gitlab)
- 苹果充电时一充一停怎么办_苹果充电线一会儿能充一会儿不能充怎么回事
- 【验证码的识别】—— 极验验证码的识别
- Visual Studio打开文件时出现“向程序发送命令时出现问题
热门文章
- 服务器虚拟化北向,KVM虚拟化的部署及使用
- 获取SpringBean对象工具类
- php文件的标准格式化,PHP获取文件大小并格式化的几种方法
- gitlab数据迁移
- 高并发下的redis击穿,你需要了解下布隆过滤器
- android NinePatch图片制做
- linux stm32 主从,STM32F407和STM32F051主从I2C通信方法
- php 时间转换编号,PHP 时间的格式转换
- Python测试框架pytest(03)setup和teardown
- date javascript 时区_js Date 时间戳 时区等问题总结