我该如何使用FaultContract属性与RIA服务一起使用,以便在将异常作为Silverlight的一部分传递时能够传递附加信息?
我该如何使用FaultContract属性与RIA服务一起使用,以便在将异常作为Silverlight的一部分传递时能够传递附加信息?
因此,我查看了反编译的RIA Services代码。似乎不可能显著地更改发送到客户端的错误信息。
您可以在DomainService中覆盖OnError()
方法,但这并不允许您返回任意信息,即使它是自定义异常类型。
原因隐藏在DomainServices.Hosting.QueryProcessor
类的异常处理中。
如果域操作中发生未处理的异常,它会向上冒泡,最终抛出FaultException()(WCF本地处理)。
不幸的是,DomainServiceFault
类非常轻量级......它只有几个属性...
public class DomainServiceFault
{
public int ErrorCode { get; set; }
public string ErrorMessage { get; set; }
public bool IsDomainException { get; set; }
public string StackTrace { get; set; }
public IEnumerable<ValidationResultInfo> OperationErrors { get; set; }
public IEnumerable<ValidationResult> GetValidationErrors()
{}
}
这些内容将在ServiceUtility.CreateFaultExceotion()
中填充,如下所示:
DomainServiceFault detail = new DomainServiceFault();
<snip/>
detail.ErrorCode = domainException.ErrorCode;
detail.ErrorMessage = ServiceUtility.FormatExceptionMessage((Exception) domainException);
detail.IsDomainException = true;
if (current != null && !current.IsCustomErrorEnabled)
detail.StackTrace = domainException.StackTrace;
return new FaultException<DomainServiceFault>(detail, new FaultReason(new FaultReasonText(detail.ErrorMessage ?? string.Empty, CultureInfo.CurrentCulture)));
OperationErrors
不会被填充。