ByteBlocks的博客文章中总结了开发WCF/Silverlight的注意事项,这样的经验之谈字字千钧,可以让后来的开发者少走许多弯路。
绑定的选择
毫无疑问,我们应该选择BasicHttpBinding,这也是Silverlight仅仅支持的一种绑定。
WCF异常的处理
Silverlight无法获取WCF异常(例如:FaultException)。如果WCF服务抛出WCF异常,在客户端应用程序只能够获得 HTTP 404错误。无疑,这会干扰调用者对异常的捕捉,同时也无法获知真正的异常信息。一种好的做法是在服务方法中定义一个out参数,在该参数中包含HTTP Status以及异常信息。可以定义一个返回信息的数据契约,例如:
public class CallResult
{
public CallResult()
{
StatusCode = 0;
StatusMessage = "OK";
}
[DataMember]
public int StatusCode
{get; set; string StatusMessage
string ExceptionDetails
}
}
编写服务方法时,可以采用如下方式:
{
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服务的部署地址,仅仅需要修改配置文件的基地址即可,其余位置不需要做任何修改。
<baseAddresses>
<add baseAddress= "http://www.myhostserver.com/MyWCFServices/"/>
</baseAddresses>
</host>