在sl3使用wcf时常常会因为sl中调用了不同域的wcf服务而导至调用服务失败,记得在很久以前sl当是只支持同域的访问,那么让我有一个想法,就是在sl引用时可以动态地取得当前sl所在的域,而wcf服务也必须同时部署到这个域下边,只要在silverlight的.web工程里添加一个WCF-Enable即就可以最简单的实现。

以下为实代码部份:

引用的命名空间

1:  using System.ServiceModel;
2:  using System.ServiceModel.Channels;

封装一个方法

 1:  //定义一个client代理
 2:  static ServiceReference1.Service1Client client;
 3:  
 4:  //定义一个返回一个client代理的方法,参数为wcf服务的.svc文件名
 5:  ServiceReference1.Service1Client getService(string serviceFileName)
 6:  {
 7:      //取得当前url地址
 8:      var url = Application.Current.Host.Source.AbsoluteUri;
 9:      //取得xap文件名
10:      var fileName = System.IO.Path.GetFileName(url);
11:      //切换成正式域名地址
12:      var realyUrl = url.Replace("/ClientBin/" + fileName, "");
13:  
14:  
15:      //sl3中的wcf-enable使用的是customBinding
16:      CustomBinding binding = new CustomBinding(
17:             new BinaryMessageEncodingBindingElement(),
18:             new HttpTransportBindingElement());
19:  
20:  
21:      //地址
22:      EndpointAddress address;
23:  
24:  
25:  
26:      if (serviceFileName == string.Empty)
27:      {
28:          //如果没有输入字符则使用默认的地址
29:          address = new EndpointAddress(realyUrl + "/Service1.svc");
30:      }
31:      else
32:      {
33:          //如果输入了参数则使用参数生成地址
34:          address = new EndpointAddress(realyUrl + "/" + serviceFileName);
35:      }
36:  
37:      if (client == null)
38:      {
39:          //如果client未建议,则新建一个client
40:          client = new FunWCF.ServiceReference1.Service1Client(binding, address);
41:          return client;
42:      }
43:      else
44:      {
45:          //client已建立,直接返回client
46:          return client;
47:      }
48:  
49:  }

使用测试

1:  void MainPage_Loaded(object sender, RoutedEventArgs e)
2:  {
3:      //取得一个client实例
4:      ServiceReference1.Service1Client svc = getService(string.Empty);
5:      //异步调用DoWork完成事件
6:      svc.DoWorkCompleted += (s1, e1) => { if (e1.Error == null && e1.Result != null) MessageBox.Show(e1.Result); };
7:      //异步调用DoWork
8:      svc.DoWorkAsync();
9:  }

转载于:https://www.cnblogs.com/jacle169/archive/2012/12/09/2810079.html

Silverlight 同域WCF免跨域文件相关推荐

  1. linux c调用wcf服务,Silverlight+WCF实现跨域调用

    在这篇文章中,WCF扮演服务器,向外提供LoginVaild服务:Silverlight扮演客户端,调用WCF提供的LoginVaild服务.思路有了,下面进行代码实现. 数据库脚本实现 新建T_Us ...

  2. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  3. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  4. 跨域问题_跨域问题如何解决?

    " 今天的内容比较大众,相信广大程序猿都有遇到过,那么咱们就不多BB了,直接往下看." 首先聊聊为什么会出现跨域问题?跨域是什么? 域(Domain)是Windows网络中独立运行 ...

  5. 什么是跨域?以及跨域的解决方案!

    什么是跨域 跨域,是指浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制. 同源策略限制了一下行为: Cookie.LocalStorage 和 ...

  6. java cookie 跨域读取_跨域读写Cookie

    Cookie作用域 Cookie 在二级域名下是可以共享的,如www.a.com 和m.a.com 他们的Cookie 是可以共享的,这也是很多单点登录利用Cookie实现的原理,但是很多站点不是二级 ...

  7. 如何解决ajax跨域java,ajax跨域问题,从java角度解决

    前言 今天给小伙伴开放一个接口方便调试数据,但是老是出现CROS策略阻塞,查询资料后知道了是ajax跨域引起的,以此记录此次解决问题的过程. 什么是ajax跨域 ajax跨域的原理 ajax出现请求跨 ...

  8. 什么是跨域?uniapp跨域问题怎么解决?

    问题描述:这几天在做一个uniapp项目,运行到Chrome上调试时出现了跨域问题,找了很久地解决方案,终于试出来一个能用的 问题描述:在HBuilderX中运行uniapp项目到Chrome浏览器上 ...

  9. 什么是跨域问题,跨域问题如何解决

    首先什么是跨域问题,跨域问题是怎么产生的哪? 说起跨域问题我们就不得不提到同源策略,即同域名同端口同协议才能访问,很显然,这种情况在如今的互联网中是根本不可能的,所以产生了跨域.那什么是跨域哪,通粗点 ...

最新文章

  1. win10 1709电脑无法显示局域网共享
  2. mybatis教程--一对多查询
  3. 冯小刚导演系列公益短片之林心如版
  4. 快速排序(Quick_Sort)
  5. JavaScript浏览器编程之——使用Cookie传递参数
  6. Excel-VBA操作文件四大方法之三(3/4)
  7. HALCON 21.11:学习笔记---OPC_UA(I/O)
  8. post方式加载iframe
  9. mysql 实现字符串的拼接
  10. 快慢指针(Fast and Slow Pointers)
  11. 版本控制工具SVN的使用
  12. 怎么禁用计算机usb驱动,电脑设置禁用U盘的四大方法|怎么让电脑无法使用U盘
  13. wegame服务器维护启动游戏失败,wegame连接服务器失败
  14. iOS 怎么查app的下载量
  15. 一顿操作猛如虎,3000 行代码重构成 15 !
  16. Flask邮件的配置和使用
  17. DataX Transformer 源码分析及 UDF 扩展与使用
  18. react-native 拨打电话
  19. centos6.8 编译安装lnmp php7.2 mysql5.6 nginx1.1.4
  20. 《数字逻辑设计与计算机组成》一练习

热门文章

  1. 【黑金原创教程】【TimeQuest】【第二章】TimeQuest模型角色,网表概念,时序报告...
  2. shell脚本 如何切换当前目录
  3. 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
  4. oracle数据库读取工具,用Oracle导入导出工具实现Oracle数据库移植
  5. php如何抓取一行的内容,提取一行作为对象 - PHP 7 中文文档
  6. 计算机一级怎么描述,计算机一级「关于RGB正确的描述的是」相关单选题
  7. 2016美国计算机研究生,2016美国留学:美国大学研究生计算机工程专业排名
  8. mysql数据库迁徙_mysql数据迁徙详解
  9. java分页 jar_零基础学java之javaEE,分页
  10. dcdc芯片效率不高的原因_半导体厂商如何做芯片的出厂测试?