|
|
1
11
如上所述 Capture all unhandled exceptions automatically with WebService 真的没有好的解决办法。 无法捕获httpapplication.error等的原因与resthandler是如何由微软的优秀人员实现的有关。具体来说,resthandler显式捕获(处理)异常并将异常详细信息写入响应:
更糟糕的是,没有一个清晰的扩展点(我可以找到),您可以在这里更改/扩展行为。如果你想写自己的ihtphandler,我相信你将不得不重新实现resthandler(或resthandlerWithSession);不管reflector是什么,它都是你的朋友。 对于可能选择修改其WebMethods的用户 如果您使用的是Visual Studio 2008或更高版本,则使用lambda表达式可以使情况不至于太糟(尽管不是全局/通用解决方案),或者删除重复的代码。
其中,execute可以在WebService的子类中实现,也可以作为扩展方法实现。 更新:反射邪恶 正如我最初的回答中提到的,你可以滥用反射来得到你想要的…具体地说,您可以创建自己的httphandler,它利用resthandler的内部结构来提供一个截取点来捕获异常详细信息。我在下面包含了一个“不安全”的代码示例来帮助您开始。 就我个人而言,我不会使用这个代码;但它是有效的。
|
|
|
2
4
这是个好问题。我在工作的Web应用程序中遇到了这个问题。恐怕我的解决方案在任何方面都不明智。我只是简单地将每个Web服务方法中的代码包装在try/catch中,并返回一个对象,该对象指示该方法是否成功运行。幸运的是,我的应用程序没有大量的网络服务调用,所以我可以摆脱这一切。如果您正在进行大量的Web服务调用,我很感激这不是一个好的解决方案。 |
|
3
2
你看了吗 WCF Web API ? 这是目前的测试版,但它已经在几个现场使用。 公开JSON/XML REST API非常容易。 在其中,您可以创建自己的httpErrorHandler派生类来处理错误。这是一种非常干净的溶液。也许值得你仔细看看。迁移任何现有的服务也应该很简单。希望它有帮助! |
|
|
4
2
编辑 是否尝试在web.config中关闭错误处理,然后添加错误模块?
正常的错误处理,正如我认为的那样,它甚至应该用于resthandler 您可以创建一个httpmodule来捕获所有错误并返回自定义结果。请注意,这将是一条错误消息,它将是对客户端的响应,而不是来自Web服务的预期结果。你也可以扔任何 习俗 应用程序中的异常,如果客户机要响应或通知用户,则让模块处理它。 正确执行的示例结果:
执行失败的示例结果:
将此添加到web.config:
您可以通过实现非常没有文档的 预应用启动方法 在模块中运行,创建并使用自定义的httpapplication类来代替标准类。通过这样做,您可以将任何模块添加到应用程序中,只需将其添加到应用程序的bin文件夹中即可。这是我目前所有应用程序的工作方式,我必须说它工作得很好。 下面的代码将捕获所有应用程序错误,并返回带有错误消息的HTML响应(您需要用自己的JSON错误消息实现替换HTML内容):
|