gpt4 book ai didi

asp.net - 关于 web 服务中的异常处理的建议

转载 作者:行者123 更新时间:2023-12-04 04:51:44 27 4
gpt4 key购买 nike

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

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

最初,我将每个 web 服务方法中的所有代码都放在 try-catch-finally 中,以捕获 Oracle 异常。我在网上读到一些文章说这不好,如果有可能出现异常,我应该只在 try-catch 中包含一些东西。现在我在想,如果我只将我的 Insert/Update/Delete 方法放在 try-catch-finally block 中,那可能是最好的。

所以我的问题是:

  • 我应该把我所有的方法都放在 try-catch-finally 中吗?它们都与 Oracle 交互,并可能导致异常。或者我应该只对插入/更新和删除方法这样做吗?
  • 当异常发生时,我对他们想要发生的事情没有任何要求。我只是说常识。我知道他们绝对不希望应用程序结束。我计划以某种方式记录异常并将其重新抛出给客户端。当出现 Oracle 异常时,我会这样做。
  • 最佳答案

    基本上你需要在每个 WebMethod 上做 try-catch .由于事件不会冒泡,我认为没有其他更好的方法。

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

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

    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 - 关于 web 服务中的异常处理的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17329126/

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