如何在RIA Services中使用FaultContract属性,以便能够将附加信息作为异常的一部分传递给Silverlight?
发布于 2012-03-13 11:08:55
所以我去寻找反编译的RIA服务代码。它似乎不可能显着改变发送给客户端的错误信息。
您可以在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。
因此,所有这一切的结果是,我认为不可能将自定义异常信息包装或附加到DomainService错误处理程序(这真的很不幸)。
https://stackoverflow.com/questions/7378601
复制相似问题