ASP.NET WebService очереди вызовов - PullRequest
1 голос
/ 23 марта 2012

У меня есть ASP.NET Webform, которая в настоящее время вызывает Java WebService. Веб-форма ASP.NET создается / поддерживается внутри, тогда как Java WS - это пакетное решение, в котором у нас есть только интерфейс WS к приложению.

Проблема в том, что Java WS иногда медленно реагирует из-за загрузки системы и т. Д., И я ничего не могу с этим поделать. Поэтому в настоящее время в веб-форме ASP.NET иногда возникает большая задержка, если Java-WS медленно реагирует, что иногда приводит к тому, что ASP.NET достигает значения тайм-аута и сбрасывает соединение.

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

Здесь и возникает идея системы массового обслуживания.

Моя идея состоит в том, чтобы форма ASP.NET создала запрос мыла, а затем поставила его в очередь в локальной очереди, где затем запускается демон и запускает запросы на Java-WS.

Прежде чем я начну что-то создавать с нуля, мне понадобится пара указателей.

  1. Является ли мое решение жизнеспособным?
  2. Существуют ли уже какие-либо библиотеки и т. Д., С которыми я могу достичь этой функциональности?
  3. Есть ли лучший способ достичь того, что я ищу?

Ответы [ 3 ]

3 голосов
/ 23 марта 2012

Вы можете создать WindowsService, в котором размещается служба WCF .

Ваше веб-приложение может вызывать методы WCF службы Windows.

Ваша служба Windows может асинхронно вызывать методы веб-службы Java, используя начало / конец шаблона

Ваша служба Windows может даже хранить ответы веб-службы Java и предоставлять их с помощью других методов WCF. Например, вы можете использовать эти методы в вашей службе WCF:

1) метод, который позволяет некорректно вызывать веб-сервис Java и возвращать идентификатор для этого вызова

2) другой метод, который возвращает результат вызова веб-службы java путем представления идентификатора вызова

Вы даже можете использовать AJAX для вызова методов WCF вашей службы Windows.

2 голосов
/ 23 марта 2012

У вас есть две отдельные проблемы:

  1. Ваша веб-форма должна научиться отправлять запрос в службу и позднее опрашивать, чтобы получить результаты этой службы.Вы можете сделать это, написав простую промежуточную службу (в WCF, пожалуйста), которая будет иметь две операции: одну для асинхронного вызова службы Java, а другую, чтобы узнать, завершился ли асинхронный вызов, и вернуть результаты, если они есть..
  2. Возможно, вам придется постоянно ставить запросы в очередь в службу Java.Самый простой способ сделать это, если производительность не является главной задачей (и кажется, что это не так), состоит в том, чтобы разбить промежуточную службу в # 1 на две части: одна половина вызывает другую половину, используя привязку WCF MSMQ.Это будет прозрачно использовать MSMQ в качестве транспорта, в результате чего запросы в очереди будут оставаться в очереди до тех пор, пока они не будут извлечены во второй половине.Вторая половина будет написана как служба Windows, чтобы она загружалась при загрузке системы и начинала очищать очередь.
2 голосов
/ 23 марта 2012

вы можете использовать MSMQ для постановки в очередь запросов от вашего клиента.Имейте в виду, что MSMQ ничего для вас не обрабатывает - это просто транспорт.

Все, что он делает, это принимает MSMQ сообщений и доставляет их в очереди MSMQ.

Создание исходных сообщений и обработка доставленных сообщений обрабатываются в вашем собственном коде на отправляющем и получающем компьютерах: на конечном компьютере должен быть установлен MSMQ плюс запущенная служба для их выбораи обработайте их

В любом случае, есть библиотеки для взаимодействия с MSQM с использованием JAVA: http://msmqjava.codeplex.com/

Другим способом может быть создание очереди в одном из окон Windows, а затем созданиеслужба, которая забирает сообщения из очереди и направляет их в службу Java

...