【问题标题】:handle global errors asmx处理全局错误 asmx
【发布时间】:2023-04-01 14:23:01
【问题描述】:

我有实现 asmx 服务的类。

class AsmxService{
public string Method(int i){.....}
....}

我省略了一些属性,但如果您认为有必要,可以提供完整的代码。

如果我在函数方法中遇到异常,这不是问题:只需使用 try-catch。但是,如果在函数之外发生错误,我们该怎么办。例如,客户端传递了无效的 int 参数或其他内容。在这种情况下,在客户端我会收到有关异常的消息。但我想隐藏所有错误细节,并总是返回简单的通知,如下所示:“发生错误。无法处理请求”。

我尝试编写 SOAP 扩展模块,但我发现它没有捕获与 asmx 相关的异常。

那么有没有可能,如果答案是“是”,我应该怎么做?

在stackaverflow上似乎时不时出现这个问题,但我无法找到决定。

【问题讨论】:

    标签: c# asp.net ajax exception-handling asmx


    【解决方案1】:

    我不知道您已经查看了关于 SOAP 扩展模块的哪些内容,但这里是 a good example of one(它从文章的一半开始)。希望对你有帮助。

    更新

    如果我对您的理解正确,您并不是在询问是否要捕获您的服务代码中抛出的异常(我假设您已经对它们进行了满意的处理)。相反,您试图在 ASP.NET 通信堆栈中捕获错误,即

    • 将客户端对象序列化到请求消息中
    • 向服务器发送请求消息
    • 将请求消息反序列化为服务器端对象
    • ...响应反之亦然

    如果是这样,那么如果我是你,我就让它保持原样,让 ASP.NET 抛出它想要的任何异常。我这么说是因为……

    捕获在您的服务代码中抛出的异常从安全的角度来看增加了真正的价值。通过在 SOAP 错误中返回最少的细节,您可以防止攻击者过多地了解您的服务。这是任何网络服务的最佳实践。

    但是,在我看来,捕获从通信堆栈抛出的异常并没有增加价值。例如,攻击者不会通过被告知“字段 X 预期 xs:int 但已通过 xs:dateTime”来了解您的代码。通过检查 WSDL,他已经知道了这一点。

    【讨论】:

    • 感谢您的回答。但是您提供的文章中写的是:使用 SOAPExtension 意味着我们只捕获 SOAP 未处理的异常——您将无法使用 Web 浏览器界面测试未处理的异常!请记住这一点!正是出于这个原因,我在解决方案中包含了一个演示 SOAP 控制台应用程序。 SOAP 客户端没有浏览器界面,因此 LogToUI 选项对 Web 服务不可用,在这种情况下被忽略。
    • 也许我说的不准确,我的 asmx 被用作 ajax 请求的 JSON 服务
    【解决方案2】:

    对于 Web 服务基础架构发回的故障,您无能为力。如果您使用 WCF,您将拥有几乎完全的控制权,但使用 ASMX 则无能为力。

    【讨论】:

      猜你喜欢
      • 2015-08-04
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2013-03-06
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多