【发布时间】:2011-01-20 19:49:16
【问题描述】:
我们目前在我们的 ASP.NET 网站上托管了一个冗长的表单,它利用面向公众的外观 WCF 服务通过 SSL 通过许多其他外观服务等将信息提交到我们的网络。
我们在服务链上遇到了一些停机问题,因此,一些用户非常沮丧,因为他们填写了冗长的表格,但在服务未启动后才发现。因此,我们在表单上实现了一种 ping 功能,它将在表单启动之前 ping 服务,以确保服务已启动。
如果在表单网页的OnLoad 期间简单地调用Ping() 方法,则可能会通过例如不断向页面发出HTTP GET 请求的脚本进行DOS 攻击。
我的问题是 - 从概念层面来看,在确保页面可用的同时确保人机交互的最佳方式是什么。例如,在调用Ping() 并启动表单之前的验证码太具有侵入性,即使它可以有效地确保正确使用表单。另一方面,简单地允许Ping() 触发OnLoad 对于攻击来说风险太大。
我考虑过的一个选项是为用户提供一个按钮,该按钮允许他们验证服务可用性并一次性启用表单。这至少是两者之间的平衡。我正在征求您对如何最好地平衡这种方法的想法的意见。任何基于 asp.net、c# 或 javascript/ajax 的答案都可以。
最后 - 我也知道这种检查服务可用性的方法存在缺陷,因为无法保证在填写表格时服务将可用 - 但已决定使用此方法,因此请保留你的回答很到位。
感谢您的帮助和提前输入!
更新 1:
响应 Josh 在下面的回答 - 我应该澄清提交的表单数据是敏感的,如果服务失败,不能缓存在服务器上或存储在本地以供以后提交。这就是为什么给用户一个先发制人的提示非常重要的原因。我们遇到的服务问题不是间歇性的,因此如果Ping() 回复为真,那么用户在几分钟后提交表单时很有可能不会遇到问题。
更新 2:
-
Ping()方法目前是服务器端 c# 方法,而不是 javascript。 - 面向公众的 WCF 服务受 IP 限制,仅允许来自公共 Web 服务器的请求
【问题讨论】:
标签: c# javascript asp.net ajax wcf