在try/catch块中包装Web服务

Bla*_*man 5 asp.net wcf web-services exception

将Web服务方法/调用包装到try/catch块中是最佳做法吗?

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

好主意?

它是应该抛出异常还是只有空捕获?

Jos*_*rlo 4

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

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

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

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

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

希望这可以帮助。

乔.