【发布时间】:2012-03-06 11:44:44
【问题描述】:
我有一些网络方法用于调用一些外部服务,例如 Google 日历 API,显然这些方法非常脆弱。
不幸的是,我现在意识到在这些方法上引发的任何错误都不会导致异常冒泡到 Global.asax,这是在此应用程序中记录错误的地方。
我看到了将方法包装在 try/catch 中的建议,这是一种愚蠢的做法,因为 ASP.Net 仍然会默默吞下各种错误。
在尝试寻找解决方案时,我看到很多对 SoapExtension 的引用,这正是我想要做的,但在我返回 Json 时并没有被解雇。我真正想要的是一种捕捉错误的方法。
感谢任何指点,我仍然无法理解 ASP.Net 团队怎么会认为像这样默默地吞下错误是个好主意。
例如这样的方法:
[WebMethod]
[ExceptionHandling] //can I write a handler like this to catch exceptions from JSON webservices?
static public void DeleteItem(string id)
{
var api = new GoogleCalendarAPI(User.InternalUser());
api.DeleteEvent(id);
return "success";
}
【问题讨论】:
-
您的问题是您使用的是旧版技术,而您应该使用 WCF。 WCF 比 ASMX 更可扩展。
-
@JohnSaunders WCF 很糟糕,几年后就会像渡渡鸟一样死去,它本身就是遗产。如果我可以使用任何东西,我会选择 MVC,但可惜你不能在一夜之间重写客户的遗留项目
-
异常处理程序只能捕获异常。如果异常被隐藏,则没有要处理的异常。
-
MVC 与 WCF 完全不同。 MVC 是关于将数据与表示分离。 WCF 是关于在端点之间发送数据。
-
@JohnSaunders Microsoft 技术的问题在于它们从不向后兼容。如果你必须使用 asmx 来维护一个带有 asmx 的旧项目,你应该迁移到 wcf 来记录错误:这是一场噩梦。