2012-03-23 2 views
1

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

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

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

Здесь возникает идея о системе очередей.

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

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

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

Вы все еще используете веб-службы ASMX? Это устаревшая технология, и вы должны использовать WCF. –

+2

Он не использует ASMX. Его веб-форму, вызывающую веб-службу Java. При этом вы считаете, что вы вызываете асинхронный вызов веб-службы Java. –

+1

@William да рассмотрели это, но как только запрос будет отправлен на веб-службу async, веб-форма закрыта и пользователь возвращается в вызывающую систему, поэтому не было бы экземпляра для обратного вызова, чтобы вернуться, если вы Поймай меня. –

ответ

2

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

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

В № 1. вы говорите «более поздний опрос, чтобы получить результаты этой службы». Я действительно не хочу, чтобы форма ввода заботилась о том, какой результат был, но мне нужно что-то заботиться, возможно, какой-то демон, встроенный в окна сервис или запись в журнал событий и т. д. –

+1

Это хорошо работает с WCF. –

+1

любые указатели на некоторые хорошие книги для обучения WCF ?? Обучение WCF, практическое руководство от Michele Leroux ?? –

2

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

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

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

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

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

+1

вам нужно Windows с обеих сторон для этого, хотя ??? –

+1

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

+1

это не вариант. Единственная точка входа в пункт назначения, который у меня есть, - это интерфейс WebService. Я не могу ничего установить на сервере Destination. –

3

Вы можете create a WindowsService hosting a WCF service.

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

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

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

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

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

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

+1

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

+1

Возможно, не обязательно, если он просто хочет убедиться, что вызовы в веб-службе java обрабатываются. Служба Windows может сделать это безопасно, без необходимости использовать очереди. – JotaBe