如您所知,使用标准WCF服务的FaultException建议处理异常以隐藏异常详细信息。这没关系,但我遇到了WCF Ria服务的问题。我想从域服务抛出异常,客户端将处理该异常。我想避免泄露异常的敏感信息,如堆栈跟踪,方法名称等。如果它是标准的WCF服务,我会使用FaultException异常,但在Ria服务中,它不起作用。无论我从域服务抛出什么样的异常,客户端总是会收到DomainOperationException。有没有办法可以从域服务向Silverlight客户端抛出FaultException(不透露实际的异常细节)?例如,我有一个登录窗口。当用户点击登录按钮时,应该有几个验证失败,例如:
我希望每个可能发生的错误都有错误类型。客户端应该检查出错的地方并相应地显示错误消息。我禁用了customErrors但它没有帮助。任何帮助,将不胜感激。 感谢
答案 0 :(得分:11)
以下是科林·布莱尔回答我的问题here
DomainService有一个可覆盖的 名为OnError的方法。每当有 是一个例外 DomainService本身(不在 WCF代码)将传递异常 在重新抛出之前的OnError 送回客户端。如果你 替换中的异常 DomainServiceErrorInfo传入 具有您自己的异常的OnError方法 然后你的例外就是那个 被发送回客户端。如果 你使用DomainException 例外,那么你将能够 传入一个ErrorCode整数 可以使用客户端来确定 实际错误。
它回答了我的问题和需求。谢谢科林。
答案 1 :(得分:0)
我已经阅读过在Silverlight中使用WCF故障,但尚未尝试使用WCF RIA。
http://mark.mymonster.nl/2011/02/10/make-use-of-wcf-faultcontracts-in-silverlight-clients/
答案 2 :(得分:0)
代码示例:
[EnableClientAccess()]
public class YourDomainService : DomainService
{
protected override void OnError(DomainServiceErrorInfo errorInfo)
{
base.OnError(errorInfo);
customErrorHandler(errorInfo.Error);
}
private void customErrorHandler(Exception ex)
{
DomainServiceContext sc = this.ServiceContext;
//Write here your custom logic handling exceptions
}
}