asp.net - 将 Web 服务包装在 try/catch block 中

标签 asp.net web-services wcf exception

将 Web 服务方法/调用包装到 try/catch block 中是否是最佳实践?

我不认为 Web 服务请求往往是 .NET 桌面应用程序崩溃的原因吗?所以我想所有的调用都应该包含在 try/catch 中以防止这种情况发生。

好主意吗?

此外,它应该抛出异常还是只是有一个空捕获?

最佳答案

我假设您正在使用 WCF,因为您的问题已用它标记。使用 WFC 进行异常处理的一个良好实践是不允许异常通过网络冒泡到您的使用者,而是抛出有意义的FaultExceptions。

如果有可能产生异常,您的操作中应该始终有一个 try...catch block 。如果您允许原始异常(exception)冒泡,则只会导致两种情况: 如果您已将服务配置为允许错误中的异常详细信息,则您将暴露服务的内部结构,从而导致安全漏洞。或者您没有在服务中配置此功能,并且消费者会收到一条非常通用的消息,表明出现了问题,这对他们或支持团队来说不是很有用。

您应该做的是声明一个或多个FaultExceptions,具体取决于您希望用户从操作中接收哪些消息,将它们装饰为操作声明中的FaultContracts。然后你可以尝试...捕获特定的异常并抛出特定的错误。您还可以使用 try...catch 来捕获异常并抛出非常一般的错误。

这里的关键是不要透露太多有关内部操作的信息 - 特别是堆栈跟踪!

错误只是另一个数据协定,因此它在您的 WSDL 中声明。这意味着您的使用者可以专门捕获错误,并且可以对您的操作引发的错误使用react,就像从其代码中抛出异常一样。

希望这有帮助。

乔。

关于asp.net - 将 Web 服务包装在 try/catch block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/359633/

相关文章:

asp.net - 对证书的困惑

asp.net-mvc - 我可以在同一个 AppHarbor 站点上运行 MVC 应用程序和 WCF Web Api 吗?

c# - 动态添加 DropDownList

c# - 从 .net 代码使用雅虎网络服务

javascript - 如何解决 Aspx.cs 中文本框的问题

java - 无法使 @webparam 强制字段 JAX-WS

c# - 从 SOAP 消息(没有 WSDL)生成 Web 服务接口(interface)?

c# - 我如何使用WCF服务而不是套接字客户端服务器应用程序?

jquery - 如何从客户端通过该时间段的时间或日期获取Telerik调度程序的时间段

java - HTML5 对 Java、PHP 和 ASP.NET 等平台最有可能产生的影响是什么?