asp.net - 关于webservice异常处理的建议

标签 asp.net web-services asmx

我需要一些关于网络服务中良好的异常处理策略的建议。

我的 Web 服务方法正在针对 Oracle 数据库执行标准 CRUD 操作。因此,我有一些选择数据并返回数据集的方法,以及其他执行插入/更新/或删除操作但不返回任何内容的方法。

最初,我将每个 Web 服务方法中的所有代码都放在 try-catch-finally 中以捕获 Oracle 异常。我在网上读到一些文章说这不好,如果有可能出现异常,我应该只在 try-catch 中包含一些内容。现在我想,如果我只将插入/更新/删除方法放在 try-catch-finally block 中,也许最好。

所以我的问题是:

  1. 我应该将所有方法放在 try-catch-finally 中吗?它们都与 Oracle 交互,并可能导致异常。或者我应该只对插入/更新和删除方法执行此操作?

  2. 对于异常确实发生时他们想要发生的情况,我实际上没有任何要求。我只是根据常识。我知道他们肯定不希望应用程序结束。我计划以某种方式记录异常并将其重新抛出给客户端。当出现 Oracle 异常时我会这样做。

最佳答案

基本上,您需要对每个 WebMethod 进行 try-catch。既然事件不会冒泡,我想也没有其他更好的办法了。

但是,您可以使用此技巧 post让您的生活更轻松。

他的做法是创建一个像这样的实用方法,并通过将委托(delegate)传递给您的 Web 方法逻辑来调用该方法。

private T Execute<T>(Func<T> body)
{
    //wrap everything in common try/catch
    try
    {
        return body();
    }
    catch (SoapException)
    {
        //rethrow any pre-generated SOAP faults
        throw;
    }
    catch (ValidationException ex)
    {
        //validation error caused by client
        ClientError innerError = new ClientError();
        //TODO: populate client error as needed
        //throw SOAP fault
        throw this.GenerateSoapException(
            "An error occurred while validating the client request.",
            SoapException.ClientFaultCode,
            innerError);
    }
    catch (Exception ex)
    {
        //everything else is treated as an error caused by server
        ServerError innerError = new ServerError();
        //TODO: populate server error as needed
        //TODO: log error
        //throw SOAP fault
        throw this.GenerateSoapException(
            "An unexpected error occurred on the server.",
            SoapException.ServerFaultCode,
            innerError);
    }
}

关于asp.net - 关于webservice异常处理的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17329126/

相关文章:

.NET:Web 服务文档的自定义格式?

c# - 在 Windows 服务而不是 IIS 中运行 Web 服务

asp.net - 从 MVC 4 项目授权 ASMX .NET Web 服务的正确方法

c# - DllImport 实例持续时间

c# - cssclass 不适用于复选框列表

java - 在 Eclipse 中创建一个简单的 JAX-WS WebService

python - Python Eve Web 服务的单元测试用例

asp.net - 使用Elmah处理Web服务中的异常

c# - ASP.NET Resourcemanager读取本地.resx

javascript - 使用 JQuery 通过单击不同表格中的按钮更改表格行背景颜色