我发布了一个question https://stackoverflow.com/questions/81306/wcf-faults-exceptions-versus-messages关于使用消息与故障异常在服务之间传达业务规则。
我的印象是,通过网络抛出此异常会带来开销,但考虑到这只是一条被序列化和反序列化的消息,它们实际上是同一个。
但这让我思考一般抛出异常或更具体地抛出FaultExceptions。
现在在我的服务范围内,如果我使用
throw new FaultException
传达简单的业务规则,例如“您的帐户尚未激活”,
现在这会带来什么开销?
它与在 .NET 中抛出常规异常的开销相同吗?或者 WCF 服务是否通过使用错误契约更有效地处理这些问题。
所以在我的用户示例中,这是编写我的服务方法的最佳/首选方式
option a
public void AuthenticateUser()
{
throw new FaultException("Your account has not been activated");
}
option b
public AutheticateDto AutheticateUser()
{
return new AutheticateDto() {
Success = false,
Message = "Your account has not been activated"};
}
嗯...一般来说,您不应该针对预期条件或任何您想要的情况抛出异常。expect定期发生。它们比正常方法慢得多。例如,如果您预计文件打开失败,请不要向调用者抛出该异常,传回失败代码,或提供“CanOpenFile”方法来进行测试。
诚然,消息文本本身并不多,但会抛出并处理真正的异常(由于 IIS,可能更昂贵),然后当反序列化错误时,在客户端上再次抛出真正的异常。所以,双打。
老实说,如果呼叫量很小,那么您可能不会受到任何明显的影响,但这无论如何不是一个好主意。谁想将业务逻辑放在 catch 块中:)
Microsoft:例外和性能以及替代方案 http://msdn.microsoft.com/en-us/library/ms229009.aspx
Developer Fusion:性能,举例 http://www.developerfusion.co.uk/show/5250/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)