gpt4 book ai didi

c# - 从 .NET Web 服务中抛出异常

转载 作者:太空狗 更新时间:2023-10-29 22:24:26 25 4
gpt4 key购买 nike

我有一组使用 [WebMethod] 属性生成的 Web 服务。如果未正确指定参数(并且无法使用合理的默认值),从此类方法中抛出 ArgumentException 是否被视为“良好做法”?如果是这样,是否应该捕获并重新抛出此异常,以便在服务器和客户端上记录它?

最佳答案

不,从 Web 服务抛出异常不是好的做法,因为 .NET 异常(如 ArgumentException)不支持跨平台(想想 Java 客户端需要如何响应)。

在 Web 服务中指示异常的标准机制是 Soap Fault .

使用 .asmx,抛出 SOAPException将为您生成故障。

如果你转向WCF,你可以看看FaultContracts .

为了改进 .Net 客户端和 .Net 服务器之间远程异常的调试,您可以使用 includeExceptionDetailInFaults 作弊并通过网络发送异常。在你的配置中。异常本身必须是可序列化的才能使其工作。但是,您需要在系统投入生产之前将其关闭。

顺便说一句,您经常会发现,如果调用者的 SOAP 请求调用格式太差(例如,如果您的参数包含无法反序列化的实体),您的 WebMethod 将不会被反序列化根本没有调用 - 调用者只会收到一个错误(通常非常神秘)。

在验证调用参数时,应该会生成上述因客户端调用您的服务的错误参数而引发的错误。

可能相关 - 一旦请求通过验证,对于您自己的内部系统状态断言,您还可以使用 Code Contracts检测内部错误(或者可能缺少本应更早发生的验证)。然而,这些不会传播给客户端。

关于c# - 从 .NET Web 服务中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4943066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com