Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.NETWeb服务引发异常_C#_Web Services_Exception Handling_Webmethod - Fatal编程技术网

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,但这要视情况而定-您的框架可能会被构造为使用具有
结果
错误
集合的复合类型。