gpt4 book ai didi

silverlight - RIA 服务和故障契约(Contract)

转载 作者:行者123 更新时间:2023-12-01 04:09:11 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

如果域操作中发生未处理的异常,它会冒泡回来,然后最终抛出一个 FaultException()(WCF 本身处理)。

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

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 错误处理程序(这真的很不幸)。

关于silverlight - RIA 服务和故障契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7378601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com