сервис веб-запросов и поиск в локальной базе данных - PullRequest
0 голосов
/ 07 мая 2011

У меня есть приложение, которое запускает несколько потоков, где часть процесса включает в себя отправку http-запросов в веб-сервис, где отправляемые мной параметры проверяются в базе данных, существует ли она, а если нет, то вставляется.

Сама база данных размещается на том же сервере, где работает приложение. Первоначально он был размещен на другом сервере, но он завис, аппаратный сбой ... и не мог обрабатывать все запросы, которые я делаю в секунду.

Теперь я получаю ошибки сервера при отправке запросов в службу и задаюсь вопросом, какой подход будет более эффективным и быстрым ... и менее подверженным ошибкам ...

  1. использовать существующий метод отправки запросов в службу и обойти проблему или
  2. самостоятельно получить доступ к БД, проверить таблицы и выполнить вставки самостоятельно, что, очевидно, замедлит процесс

Я пытаюсь избежать проблем здесь, и программист, который настраивает службу, говорит, что он сделал все с его стороны, и я должен больше распределять свои запросы, но я все еще не понимаю, почему вдруг я получаю первичный ключ ошибки нарушения, когда перед переездом, если я отправил параметр, уже существующий в таблице, я получил бы ответ с заданным набором, а не внутреннюю ошибку сервера.

1 Ответ

1 голос
/ 08 мая 2011

Запросы веб-сервиса являются асинхронными, поэтому вы не сможете учесть ошибки нарушения PK.Существуют различные способы справиться с ситуацией:

  1. Код хостинга веб-службы должен быть изменен для обработки ситуации, когда при наличии PK он должен возвращать тот же ответ, который он дал в первый разэтот запрос был отправлен.Вызывающие запросы являются отдельными, и в отдельных потоках, и никогда не узнают, что другой запрос уже вставил то же значение.Суть WS в том, что несколько запросов могут поступать одновременно из любого места.Бизнес-логика должна обрабатывать то, что они приходят одновременно.

  2. Измените свой код для прямого доступа к БД (как вы упомянули).Это никоим образом не замедлит процесс (хотя работа по изменению вашего кода требует предварительной работы), поскольку запрос WS должен проходить по протоколу HTTP, тогда как из вашего кода вы будете получать доступ напрямую через поставщика ADO или OLEDB, предоставленного вашим кодом..

  3. Вы могли бы поставить свои запросы в очередь, а затем нажимать один за другим и не нажимать следующий, пока одна обработка не получит ответ.Мне это не нравится, потому что это не масштабируемо - побеждает цель WS (но вы можете застрять с этим, если программист не меняет код WS)

Решениепредложенный кодером WS смешон.Нет способа разнести ваши запросы так, чтобы это не вызывало нарушение PK.Вы не сможете узнать, какие из них уже вставлены или какие другие запросы уже обрабатываются.Кроме того, разнесение запросов не делает все приложение масштабируемым - ваш интерфейс (или все остальное, ожидающее ответа) в конечном итоге будет ждать.

...