Как выставить локально установленное приложение как веб-сервис? - PullRequest
0 голосов
/ 07 мая 2011

Предположим, у меня есть 2 веб-сервиса A и B в проекте SOA.Оба веб-сервиса работают на удаленных серверах.Веб-служба A зависит от информации, доступной только из локально установленного настольного приложения на компьютере-актере, и это делает вся веб-служба A, т.е. предоставляет эту информацию).Существуют сотни таких действующих лиц с одним и тем же локально установленным приложением, предоставляющим свою собственную информацию, необходимую веб-службе А.Веб-сервис B нуждается в этой информации от веб-сервиса A, результат которого (что является целым преимуществом этого проекта) предоставляется тому человеку, который инициировал этот процесс (путем входа в систему и нажатия какой-либо кнопки команды).Таким образом, этот человек действует как потребитель Web-сервиса B. Вопрос в том, как заставить это локально установленное приложение работать как Web-сервис A (в контексте проекта SOA)?

Этот вопрос лучше всегона него ответил кто-то с большим опытом работы с веб-сервисами и SOA.

В этом проекте SOA используется Java, как и ESB, основанный на Java, и нет специальных сервисов Microsoft, хотя настольное приложение является приложением Windows.Приложение предоставляет API-интерфейс c / C ++ для внешнего процесса, чтобы вызывать и извлекать информацию, необходимую для веб-службы A. Я хочу, чтобы веб-службы A и B размещались на удаленном сервере и взаимодействовали друг с другом через ESB, но проблема заключается в том, чтокак сделать информацию о локальном приложении доступной для веб-службы A?

1 Ответ

3 голосов
/ 08 мая 2011

Существует два типа решений

Первое: попросите исходное клиентское приложение добавить параметр с адресом веб-службы A и использовать этот адрес для вызова службы.

Второе: передать более абстрактный идентификатор пользователя от клиента (на самом деле, есть большая вероятность, что у вас есть такое поле в сервисе). и использовать службу перевода для извлечения физического адреса, соответствующего этому идентификатору. Чтобы разрешить такой перевод, настольное приложение, выполняющее роль сервера, при запуске должно «зарегистрироваться» в службе перевода.

Если вы используете ESB или другую инфраструктуру SOA (например, каталог службы, служба очереди сообщений), она будет включать большую часть функций, необходимых для построения службы перевода.

относительно фактического размещения услуги на клиентском компьютере.

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

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

EDIT

некоторые дополнения, касающиеся вашего разъяснения.

Как я понимаю, настольное приложение предоставляет API C \ C ++, который доступен для внешних процессов на той же машине.

Вы можете написать веб-сервис, который будет использовать этот API. Поиск в Google "C ++ Web Services Windows" даст вам несколько советов по их реализации.

Еще одним хорошим вариантом является использование инфраструктуры обмена сообщениями. большинство провайдеров JMS предоставляют API на языках, отличных от Java, включая C ++. Ваше приложение будет службой Windows C ++, которая слушает и отправляет сообщения вашему провайдеру JMS.

...