开发WCF/Silverlight须知

简介:

ByteBlocks的博客文章中总结了开发WCF/Silverlight的注意事项,这样的经验之谈字字千钧,可以让后来的开发者少走许多弯路。

绑定的选择

毫无疑问,我们应该选择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
     {getset; }
    [DataMember]
     public  string StatusMessage
     {getset; }
    [DataMember]
     public  string ExceptionDetails
     {getset; }
}

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

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跨域访问时,就会出现一个安全错误。








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

相关文章
|
C# 前端开发
silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发) 前面我们画了一只会飞动的小鸟,今天我们在目标是一个会发光的太阳。本章节的动画虽然简单,但是实现的效果可是一点也不打折。
1187 0
|
C#
silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发) 本教程基本涵盖了WPF和silverlight中的各种动画。先上张效果图。 声明下,这个做的不是让大家照搬的,只是让大家熟悉下动画效果,这个成品基本涵盖了sl里面所有的动画效果。
1399 0
|
C#
silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发) 有个问题想请教下大家,我仿了腾讯的SL版QQ,相似度95%以上。我想写成教程教大家怎么开发出来,会不会有版权什么问题的。
1150 0
|
前端开发 C#
silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发) 这章有点长,所以我分成了两章。这一章主要是准备工作,差不多算美工篇吧,这章基本不会介绍多少动画效果,主要讲的是blend中工具的使用,利用哪些工具做出哪些效果。
1257 0
|
前端开发 C#
silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发) 这篇介绍的是3D导航,点击图标,页面360°翻转的效果!有什么不足的欢迎大家指出来。 1.新建一个usercontrol,命名为menu. 2.按照下图设置一下属性。
1248 0
|
XML 网络架构 数据格式
|
测试技术 Go 数据库
使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型
本文目的是通过Silverlight ria service完成一次数据的读取过程,并且在此基础上建立测试项目。 Ria service借助于WCF和ADO.NET Entity Framework构建分布式开发框架。
969 0
|
数据库 测试技术 安全
使用Entity Framework和WCF Ria Services开发SilverLight之2:POCO
在上一篇中《使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型》我们提出这类简单模型的几个问题: 1:实体模型被紧耦合在EDM中,同时它不能项目(模块)使用。
1239 0