首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RIA服务和FaultContract

RIA服务和FaultContract
EN

Stack Overflow用户
提问于 2011-09-11 21:43:21
回答 1查看 507关注 0票数 4

如何在RIA Services中使用FaultContract属性,以便能够将附加信息作为异常的一部分传递给Silverlight?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-13 11:08:55

所以我去寻找反编译的RIA服务代码。它似乎不可能显着改变发送给客户端的错误信息。

您可以在DomainService中覆盖OnError()方法,但这不允许您传回任意信息,即使它是自定义异常类型。

原因隐藏在DomainServices.Hosting.QueryProcessor类的异常处理中。

如果域操作中发生了未处理的异常,它会重新冒泡,然后最终抛出FaultException() (由WCF本机处理)。

不幸的是,DomainServiceFault类非常轻量级...它只有几个属性...

代码语言:javascript
复制
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()中的填充方式如下:

代码语言:javascript
复制
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错误处理程序(这真的很不幸)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7378601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档