Kar*_*ten 15 .net wcf exception
什么时候创建新的异常类型而不是使用.Net中的内置异常?
让我思考的问题是这个.我有一个WCF服务,这是一个基本的输入输出服务.如果服务无法创建输出,因为输入无效,我想抛出异常,但是哪一个?
现在我只是抛出system.Exception,但这对我来说感觉不对,我不知道为什么,这只是感觉不对.有一件事让我感到困惑,如果我用单元测试测试它,我希望抛出system.Exception.该异常也可以由框架或其他代码抛出,而不是由我抛出的代码抛出.然后测试将通过,因为我得到预期的异常,但它应该失败.
您有什么推荐的吗?
Kei*_*ith 15
避免投掷System.Exception
或System.ApplicationException
自己,因为它们太笼统.
对于WCF服务,存在故障合同 - 您可以告诉子公司要处理的一般例外.
将接口标记为:
[FaultContract( typeof( LogInFault ) )]
void LogIn( string userName, string password, bool auditLogin );
Run Code Online (Sandbox Code Playgroud)
然后,如果有异常,您可以抛出此特定错误:
throw new FaultException<LogInFault>( new LogInFault(), "message" );
Run Code Online (Sandbox Code Playgroud)
使用[DataContract]
序列化可以解决问题 - 这使您无需处理通常需要的所有序列化内容.
绝对避免为抛弃代码以外的任何东西抛出System.Exception.
如果方法的参数无效,则抛出ArgumentException(或某些派生的,更具体的异常).在创建自己的异常之前,请查阅文档以了解现有异常 - 但这样做通常很有用.(当然,您可以从ArgumentException派生自己的异常类型 - 如果您想要从多个位置指示某种特定类型的条件,则创建新类型会提供更多信息,而不仅仅是将其放入错误消息中. )
现在,WCF中的错误处理可能与"普通"框架中的错误处理不同 - 我建议您参考WCF特定的文档/书籍.
归档时间: |
|
查看次数: |
1308 次 |
最近记录: |