我有一个使用各种外部资源(Web服务,文件系统,数据库)的应用程序,因此配置起来非常困难。计划是向应用程序添加自诊断工具,以便它可以报告配置问题并允许用户更正它。在设计这样的功能时,我应该考虑任何设计模式,库,示例等吗?
应用程序是用C#和ASP.NET编写的。
答案 0 :(得分:1)
一种方法是在您网站的管理区域中提供一组报告这些外部资源状态的页面。例如,它可能会告诉您配置为连接的数据库(如果它可以建立连接),它运行的服务器(如果是loadbalanced),等等。
对于Web服务,我有一个小的服务运行,并且每隔几分钟“ping”Web服务以查看它是否仍然存在。如果不是,我会在手机上收到短信(偶然通过其他第三方服务)和电子邮件中的详细错误报告 - 您可能更愿意这样做,而不必知道检查网站上的网页。
我不知道是否有任何特定的设计模式,我只是将此报告元素添加到应用程序中的常规图层。
答案 1 :(得分:1)
如果他们能看到你,你可以看到他们
向您的(外部)应用添加一个图层,以某种形式发送异步“ping”。可能是一个消息传递,类似主题的中间件工具。
如果您无法控制外部系统,可能会添加一个执行诊断的sep-A-RAT-e“facade”应用程序(例如,通过超时调用http连接)然后发送ping代表外部应用程序。
使用可配置的远程应用程序列表(消息类型)向您的中央应用程序添加一个监听器,这些远程应用程序将被ping入并在其中一个未能执行此操作时发出警报。
请确保在不同的线程中异步运行所有这些操作。您不希望阻止UI线程或等待超时的太多开放网络连接。
这样您的中央应用程序的开销很小。它不需要自己进行轮询,只需使用队列侦听器和应用程序映射,以及它们最后一次调用时。如果其中一个达到了最近未调用的阈值,则表示您遇到问题应用程序有一些方法让你知道。
答案 2 :(得分:0)
假设你只是指静态配置,
添加一个客户可访问的单元测试,该测试可以运行所有系统接口。 你已经有一个,对吗?
称之为“验证配置”。什么的。
希望这有帮助。
答案 3 :(得分:-2)
您可能会考虑使用规则引擎 - 专家系统长期以来一直用于诊断和故障排除。这允许修改和扩展规则而不是更改代码库,因为您很可能会忽略许多情况,并且环境可能会发生变化,需要添加新规则。