处理全局错误asmx

时间:2012-01-10 07:51:20

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

我有实现asmx服务的类。

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

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

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

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

那么它是否可能,如果答案是'是',那么我应该做什么?

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

2 个答案:

答案 0 :(得分:0)

我不知道你对SOAP扩展模块已经看过了什么,但是这里是a good example of one(它从文章的中间开始)。我希望它有所帮助。

<强>更新

如果我理解正确,那么您不会要求捕获服务代码中引发的异常(我假设您已经满意地处理它们)。相反,您试图捕获ASP.NET通信堆栈中的错误,即

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

如果是这样,那么如果我是你,我会留下它,让ASP.NET抛出它想要的任何例外。我这样说是因为......

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

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

答案 1 :(得分:0)

对于Web服务基础结构发回的错误,您无法做任何事情。如果你使用的是WCF,你可以完全控制,但是使用ASMX你无能为力。