如何解决WCF异常抛出和处理OOP方式
| 好的,所以我在这里就同一主题又问了一个问题,虽然在那里我没有得到直接的答案,但是我整理了一些代码,这些代码可以用来做我想做的事情。问题是,这种方式是否违反了一些OOP原则? 我想要什么 使用适当的OOP声明服务的故障类型 客户端有一个catch块,可以处理从服务引发的多种类型的异常 每个故障类都有一个自己的实现的HandleException方法 在客户端,只有一个异常块可以了解引发了什么异常,并从相应的故障类中调用相应的HandleException方法 我如何运作 在服务器上声明了从基本异常类型继承的每种异常类型的故障契约[DataContract]
public class BusinessRuleViolationFault : BaseFault
{
public BusinessRuleViolationFault(string message)
: base(message)
{
}
}
[DataContract]
public class SomeOtherViolationFault : BaseFault
{
public SomeOtherViolationFault(string message)
: base(message)
{
}
}
[数据合同]
公共抽象类BaseFault
{
public BaseFault(string message)
{
Message = message;
}
}
在客户端,我创建了与上述故障类型相同的部分类,并在其中实现了异常处理方法。我必须在客户端执行此操作,因为如果我在服务端创建了此方法,它将无法序列化,并且可以通过代理使用。
public partial class BusinessRuleViolationFault : BaseFault
{
public override void HandleException()
{
MessageBox.Show(\"BusinessRuleViolationFault handled\");
}
}
public partial class SomeOtherViolationFault : BaseFault
{
public override void HandleException()
{
MessageBox.Show(\"SomeOtherViolationFault handled\");
}
}
public abstract partial class BaseFault
{
public abstract void HandleException();
}
然后根据我在上一篇文章中标记为可接受答案的Christians代码,在faultexception类上创建了扩展方法。基本上,这是通过反射使我获得抛出的故障异常类的名称。
然后,在我的客户端catch块中,我使用该名称来创建具有句柄异常方法的本地创建的部分类的实例。
我很想知道的是,我在这里违反了一些OOP原则吗?
完全是OOP吗?
我不希望在这个catch块中有多个if else语句,或者有多个catch块。您对使用一个catch块来获得性能并通过尝试找出要调用的类方法进行反思而失去的权衡有何看法?
感谢您的时间和耐心...
解决方法
我不完全理解为什么这里需要反射(如先前发布的问题所述)。我只是在我的代码中这样做,并且效果很好:
try
{
proxy.CallServiceMethod(message);
}
catch (Exception e)
{
if (e is FaultException<BaseFault>)
{
BaseFault exceptionToHandle =
(e as FaultException<BaseFault>).Detail as BaseFault;
exceptionToHandle.HandleException();
}
}
除了不必要的反思之外,我没有发现您实现此问题的方式有任何错误(至少从OOP的角度来看)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。