我有一个依赖于soap服务器来生成内容的应用程序。此外,对站点的身份验证基于单独的LDAP服务器。显然,如果其中任何一个关闭或没有响应,该网站将关闭。
我正在尝试布置一个设计,以便我可以为站点管理员提供错误报告,并在网站关闭的情况下向用户提供一个很好的消息。错误报告实际上只是PHP $ _COOKIE,$ _SERVER,$ _SESSION,$ _REQUEST服务器上的电子邮件,数据库插入或日志到文本文件,以及可能的SoapFault异常。这些信息可以帮助我调试网站发生的任何潜在问题。
目前,我的网站设计如下:
SoapClientInterface (defines soap functionality)
/ \
|
| implements
|
Client (the client implementing the interface, try/catch blocks on all soap calls here)
/ \
|
| extends
|
Authorization (asserts soap objects returned from server/ requests going to server
are appropriate for the user performing the request)
/ \
|
| extends
|
{all children classes using the soap interface defined on this level}
从上面的糟糕图表中:-)我有一个类Client,它包含了所有关于soapfault异常的try catch块,并且我想知道用catch做两件事的最佳方法:
1.通知用户操作失败(我的所有功能都在if / else块中,如果我确定操作失败,我会将用户重定向到状态页面并通知他们他们的操作失败。
2.向站点管理员报告情况以进行调试(此功能目前是状态页面中定义的一个简单功能,当状态页面获取错误代码时,我们会转储Cookier,Server,Session和Request变量并将其通过电子邮件发送到站点管理员。
对此有任何建议,或者如果您需要澄清,请询问。
编辑:根据我的网络编程经验,我的应用程序通常会在执行操作的页面上显示用户操作的状态,而不会在其他地方重定向。这是我第一次编写应用程序以执行用户操作并重定向到所有状态消息的单独页面。我是否应该这样做,有没有人认为有一个状态页面适用于所有网站操作,或者有一个类/功能报告发生操作的页面上的状态? (我在考虑自己设计状态页面以及如何报告错误以及什么不是这些问题时都会问这个问题。)
答案 0 :(得分:1)
嗯,我个人认为这取决于错误。根据我的经验,有三种类型的例外。那些你可以忽略的,你可以解决的那些,以及你用来终止执行的那些(如果你只是想删除文件,file_not_found
异常就可以忽略resource_not_available
异常如果有资源的替代来源,可以解决这个问题,除非你有备份,否则database_connection_failure
例外需要终止应用程序... ...捕获了哪种类型的例外将决定你做什么用它。
就个人而言,我安装了global exception handler ...然后,在我的catch块中,我可以选择是否清理请求,以不同方式处理,继续(如果它是可恢复的异常),或者重新抛出如果我无法正确处理它的例外(查询错误等)。如果异常使它成为堆栈的顶部(全局处理程序),那么我记录错误(我使用数据库表)并抛出500内部服务器错误。
就重定向错误而言,我无法忍受。如果错误是时间错误,那为什么我不能只刷新页面?为什么我必须回去(如果我可以的话)再试一次......
只要您正确输出缓冲区,您几乎总是能够呈现错误页面而不向用户显示任何敏感信息(我说差不多,因为您无法为致命错误渲染任何内容)...否则你破坏了HTTP规范(因为你说的是当前页面发生错误的临时重定向,而不是正确的“发生错误”状态标题)...