博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight动态设置WCF服务Endpoint
阅读量:6881 次
发布时间:2019-06-27

本文共 2030 字,大约阅读时间需要 6 分钟。

去年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都是指向本地。

 

 

为了实现动态设置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地址。值得注意的是,该方法仅能支持应用与服务在相同域中,如果服务在不同的域中,必须进行跨域设置才能完成动态设置。

本文转自  51CTO博客,原文链接:http://blog.51cto.com/kevinfan/1130987 ,如需转载请自行联系原作者

你可能感兴趣的文章
已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数...
查看>>
jquery
查看>>
伏地魔
查看>>
linux
查看>>
安装虚拟机-linux系统步骤
查看>>
python基础===monkeytype可以自动添加注释的模块!
查看>>
中序线索二叉树算法 解决 把二元查找树转变成排序的双向链表
查看>>
Bat 脚本实现监控进程功能
查看>>
Js判断是否联网引入不同js
查看>>
pwnable.kr bof之write up
查看>>
Sql语句查询某列A相同值的另一列B最大值的数据
查看>>
技术串讲 CAS 有用
查看>>
怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
查看>>
Tensorflow学习笔记(1):tf.slice()函数使用
查看>>
ORA-01102的解决办法
查看>>
奇怪的iphone6 plus,H5调用拍照浏览器崩溃
查看>>
MVC接受JSON的一些注意事项
查看>>
response对象设置输出缓冲大小
查看>>
MVC+Ninject+三层架构+代码生成 -- 总结(七、顯示層 一)
查看>>
[CF1105D]Kilani and the Game
查看>>