转自:http://www.agiledon.com/post/2009/03/WCF-Silverlight-Lessons.html

绑定的选择

毫无疑问,我们应该选择BasicHttpBinding,这也是Silverlight仅仅支持的一种绑定。

WCF异常的处理

Silverlight无法获取WCF异常(例如:FaultException)。如果WCF服务抛出WCF异常,在客户端应用程序只能够获得 HTTP 404错误。无疑,这会干扰调用者对异常的捕捉,同时也无法获知真正的异常信息。一种好的做法是在服务方法中定义一个out参数,在该参数中包含HTTP Status以及异常信息。可以定义一个返回信息的数据契约,例如:

[DataContract]
public class CallResult
{
    public CallResult()
    {
        StatusCode = 0;
        StatusMessage = "OK";
    }
    [DataMember]
    public int StatusCode
    {get; set;}
    [DataMember]
    public string StatusMessage
    {get; set;}
    [DataMember]
    public string ExceptionDetails
    {get; set;}
}

编写服务方法时,可以采用如下方式:

public double Convert(string from, string to, out CallResult status)
{
    status = new CallResult();
    if (string.IsNullOrEmpty(from) ||
        string.IsNullOrEmpty(to))
    {
        status.StatusCode = 2;
        status.StatusMessage = "Invalid or empty curreny symbols specified";
        return 0;
    }
    try
    {
        string config = ConfigurationManager.AppSettings["htmlparserconfig"];
        var converter = new CurrencyConverter(config);
        return converter.Convert(from, to);
    }
    catch (Exception ex)
    {
        status.StatusCode = 9;
        status.StatusMessage = "Failed to get currency conversion rate";
        status.ExceptionDetails = ex.Message;
        //TODO: Log this message.
    }
    return 0;
}

WCF服务的部署

在将WCF服务部署在Web服务器上时,最好在配置文件中为WCF服务添加一个基地址。如果未来需要修改WCF服务的部署地址,仅仅需要修改配置文件的基地址即可,其余位置不需要做任何修改。

<host>
  <baseAddresses>
    <add baseAddress="http://www.myhostserver.com/MyWCFServices/"/>
  </baseAddresses>
</host>

此外,至关重要的一点是要让服务跨域边界可用。Silverlight 在默认情况下只允许源站点通信。若要允许 Silverlight 控件访问其他域上的服务,该服务必须明确选择允许跨域访问。通过选择,服务声明它公开的操作可以由 Silverlight 控件安全地调用,而不会对该服务存储的数据造成具有潜在危害的结果。Silverlight 2.0 支持两种不同的机制供服务选择跨域访问:
(1)在承载服务的域的根目录中放置一个 clientaccesspolicy.xml 文件,以配置服务允许跨域访问。
(2)在承载服务的域的根目录中放置一个有效的 crossdomain.xml 文件。该文件必须将整个域标记为 public。

例如,创建如下的clientaccesspolicy.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

如果只允许从其他域中的一个进行访问(例如 http://agiledon.com),clientaccesspolicy.xml 应当包含以下配置:

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="http://agiledon.com"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

然后再将该文件保存到托管该服务的域的根目录中。例如,如果该服务在 http://agiledon.com 上承载,则文件必须位于 http://agiledon.com/clientaccesspolicy.xml。

如果进行如上的配置,在Silverlight跨域访问时,就会出现一个安全错误。

转载于:https://www.cnblogs.com/drc606/archive/2009/11/23/1609084.html

开发WCF/Silverlight须知相关推荐

  1. Silverlight C# 游戏开发:Silverlight开发环境

    Silverlight C# 游戏开发:Silverlight开发环境 所谓工欲善其事必先利其器,没有好的工具也没有办法做事,我以前曾经想学习C++以外的程序语言,当时有java和C#来选择,当时考虑 ...

  2. WCF+Silverlight部署本机备忘

    wcf+silverlight在部署到IIS上时的步骤 1.web程序中添加wcf服务 2.sl程序中引用该服务 private void button1_Click(object sender, R ...

  3. 网页最少要有一个html标签,PHP_网页开发人员必须知道的10个不常用HTML标签, 网页开发人员常常希望能 - phpStudy...

    网页开发人员必须知道的10个不常用HTML标签 网页开发人员常常希望能够了解并掌握多种语言,结果是,学习一门语言的所有内容是棘手的,但是却很容易发现你并没有完全利用那些比较特殊却很有用的标签. 不幸的 ...

  4. 学习 WCF (3)--开发WCF客户程序

    前篇Learn WCF (2)--开发WCF服务介绍了开发服务程序,这篇开发一个客户程序,主要有三种方案: 添加一个Web引用 使用svcutil.exe工具 编程方案 1.添加一个Web引用 这个和 ...

  5. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):目录

    本系列教程的示例代码下载(感谢 银光中国 提供资源分流): 第一部分源码:WPFGameTutorial_PartI(1-20节) 第二部分源码:WPFGameTutorial_PartII(21-2 ...

  6. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二)让物体动起来②

    第二种方法,CompositionTarget动画,官方描述为:CompositionTarget对象可以根据每个帧回调来创建自定义动画.其实直接点,CompositionTarget创建的动画是基于 ...

  7. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(一)让物体动起来①

    序:自从QXGame(WPF GAME ENGINE)游戏引擎公布以来,受到很多朋友的热切关注,于是乎有了写教程的想法.那么从今天开始,我将带领大家一步一步的学会如何使用纯C#开发WPF/Silver ...

  8. 基于WP7开发的Silverlight常用控件详解

    Silverlight是一个跨浏览器.跨客户平台的技术,能够设计.开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程序. 针对Windows P ...

  9. WCF+Silverlight一个简单的RSS阅读器(二)

    嘿嘿,坚持不懈,继续我的Silverlight之旅,创建了WCF服务,我们需要的是通过Silverlight能够应用这个服务, 比起2005,2008的服务引用做的好多了,上图: 通过右边的Disco ...

  10. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十五)完美捕捉精灵之神器 -- HitTest...

    怪物们都出现了,如何选中自己心仪的怪是主角目前首要做的事. 为了进行鼠标状态区别,我首先对鼠标变化规则进行约束:当鼠标在屏幕上空旷地图区域移动时,鼠标光标形态表现为默认光标 (0号光标图片),当鼠标经 ...

最新文章

  1. 解决Lync Server 2013无法共享演示PPT
  2. 雅特力415开发资料_雅特力在车用电子领域 AT32 MCU应用于ADAS环视系统
  3. python-Django收集主机信息
  4. 【爬蟲】爬蟲概述、分類及運行原理
  5. mysql数据库在查询的时候不能使用字段别名,字段别名只在显示的时候显示出来
  6. Medoo 开源项目发布,超轻量级的PHP SQL数据库框架
  7. SQL SERVER 数据导出JSON
  8. 如何对抗硬件断点--- 调试寄存器
  9. Mybatis(8)DAO实现类的使用方式
  10. 安装cocoaPod 的问题
  11. C#调用Microsoft.DirectX.DirectSound问题记录及解决
  12. 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
  13. R︱Yandex的梯度提升CatBoost 算法(官方述:超越XGBoost/lightGBM/h2o)
  14. Codeforces 396C
  15. 收藏| 一些可供参考的游戏出海技术架构与经验总结
  16. c语言结构体定义常量,C语言结构体
  17. 桐桐的数学难题(质因数分解)
  18. python pygame 游戏实践: 俄罗斯方块(Tetris Game)第一步
  19. 《The C Programming Language》答案(第一章)
  20. python代码圣诞树你还没有嘛?所有画法都在这篇文章里拉~

热门文章

  1. Weka数据挖掘平台
  2. ORA-12170: TNS: 连接超时 问题
  3. linux面试题(填空部分)
  4. java用户注册模块_用户注册登录模块设计方案报告.docx
  5. do...while(); 语句在宏定义中的应用。
  6. dubbo服务压力测试
  7. 设计模式---观察者模式(C++)
  8. [渝粤教育] 西南科技大学 电子技术基础 在线考试复习资料
  9. [渝粤教育] 西南科技大学 公共事业管理概论 在线考试复习资料
  10. 【渝粤教育】广东开放大学 学前儿童保育学 形成性考核 (40)