首页  ·  知识 ·  
Label
      编辑:  图片来源:网络
绑定的选择
毫无疑问,我们应该选择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跨域访问时,就会出现一个安全错误。
本文作者:网友 来源: http://www.cnblogs.com/SissyNong/archive/2009/12/28/1633765.html
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的
收藏至微信