版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://wayfarer.blog.51cto.com/1300239/279922
|
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 {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 支持两种不同的机制供服务选择跨域访问: 例如,创建如下的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跨域访问时,就会出现一个安全错误。
本文出自 “晴窗笔记” 博客,请务必保留此出处http://www.voidcn.com/article/p-mtyvccha-bs.html |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。