C# 从.NETWeb服务引发异常
我有一组使用C# 从.NETWeb服务引发异常,c#,web-services,exception-handling,webmethod,C#,Web Services,Exception Handling,Webmethod,我有一组使用[WebMethod]属性生成的web服务。如果该方法的参数没有正确指定(并且不能使用合理的默认值),则从该方法抛出ArgumentException是否被视为“良好做法”?如果是这样,是否应该捕获并重新抛出此异常以将其记录到服务器和客户端上?使用异常与自定义错误代码始终是一个艰难的决定。您应该估计该案例的“例外”程度,以及您计划如何处理消费者方面的错误。使用异常通常是意外情况(如缺少重要参数)和自定义错误代码来处理业务类错误 更新:这当然只适用于创建新服务的情况。如果修改现有的异常
[WebMethod]
属性生成的web服务。如果该方法的参数没有正确指定(并且不能使用合理的默认值),则从该方法抛出ArgumentException
是否被视为“良好做法”?如果是这样,是否应该捕获并重新抛出此异常以将其记录到服务器和客户端上?使用异常与自定义错误代码始终是一个艰难的决定。您应该估计该案例的“例外”程度,以及您计划如何处理消费者方面的错误。使用异常通常是意外情况(如缺少重要参数)和自定义错误代码来处理业务类错误
更新:这当然只适用于创建新服务的情况。如果修改现有的异常,您必须知道现有客户端如何使用它,以及它们如何期望错误代码。不,从web服务引发异常不是一个好的做法,因为.NET异常(如
ArgumentException
)不受跨平台支持(想想Java客户端需要如何响应)
指示Web服务中异常的标准机制是
使用.asmx
,抛出错误将为您生成错误
如果您转到WCF,您可以查看
为了更好地调试.Net客户端和.Net服务器之间的远程异常,您可以通过在配置中使用来欺骗并跨线路发送异常。异常本身必须可序列化才能正常工作。但是,您需要在系统投入生产之前将其关闭
另一方面,如果调用方的SOAP请求调用的格式太差(例如,如果您的参数包含无法反序列化的实体),则您的WebMethod
将根本不会被调用-调用方只会收到一个错误(通常非常神秘)
当验证调用参数时,应生成因客户端对服务的调用中的错误参数而引发的上述错误
可能相关-一旦请求通过验证,对于您自己的内部系统状态断言,您还可以使用来检测内部错误(或者可能是本应更早发生的缺少验证)。但是,这些将不会分发给客户端。是一篇关于web服务异常的好文章。好的,应该不需要重新抛出,因为您可以配置要发送的故障。从表面上看,我会说是的,throw,但这要视情况而定-您的框架可能会被构造为使用具有
结果
和错误
集合的复合类型。