В настоящее время мы размещаем длинную форму на нашем веб-сайте ASP.NET, которая использует общедоступный фасадный сервис WCF для передачи информации через SSL в нашу сеть через ряд других фасадных служб и т. Д.
У нас возникли некоторые проблемы с простоями в цепочке услуг, и из-за этого некоторые пользователи были очень разочарованы тем, что заполняют длинную форму, чтобы узнать только после того, как служба не работает. По этой причине мы внедряем в форму функциональность проверки связи, которая будет проверять службу перед запуском формы, чтобы убедиться, что служба работает.
Если метод Ping()
просто вызывается во время OnLoad
веб-страницы формы, существует вероятность атак DOS, например, через скрипт, который постоянно отправляет HTTP-запросы GET на страницу.
Мой вопрос - с концептуального уровня, каков наилучший способ обеспечить взаимодействие человека со страницей при сохранении ее применимости. Например, CAPTCHA до вызова Ping()
и запуска формы является слишком навязчивым, даже если это будет эффективным для обеспечения правильного использования формы. С другой стороны, просто позволить Ping()
стрелять OnLoad
слишком рискованно для атак.
Один из вариантов, который я рассмотрел, заключается в том, чтобы предоставить пользователям доступ к кнопке, которая позволяет им проверять доступность службы и активировать форму за один раз. Это будет по крайней мере баланс между двумя. Я прошу ваш вклад в идеи о том, как лучше сбалансировать этот подход. Любые ответы на основе asp.net, c # или javascript / ajax хороши.
Наконец, я также знаю, что у этого подхода есть недостатки в проверке доступности услуг, поскольку нет гарантии, что сервис будет доступен к моменту заполнения формы, но было принято решение использовать этот подход, поэтому, пожалуйста, продолжайте ваши ответы по пункту.
Спасибо за помощь и вклад заранее!
ОБНОВЛЕНИЕ 1:
В ответ на ответ Джоша ниже - я должен уточнить, что отправленные данные формы являются конфиденциальными и не могут быть кэшированы на сервере или сохранены локально для последующей отправки в случае сбоя службы. Вот почему очень важно дать пользователю преимущество над головой. Проблемы, возникающие у нас с сервисами, не являются случайными, поэтому, если Ping()
вернется, есть очень хороший шанс, что пользователь не столкнется с проблемами при отправке формы через несколько минут.
ОБНОВЛЕНИЕ 2:
- Метод
Ping()
в настоящее время является методом c # на стороне сервера, а не javascript.
- Общедоступная служба WCF ограничена IP-адресами, чтобы разрешать запросы только от публичного веб-сервера