Каков стандартный метод взаимодействия веб-сайта с исполняемым файлом win32? - PullRequest
3 голосов
/ 14 мая 2009

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

Этот код нетривиально переписать на другом языке.

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

Код delphi должен поддерживать список специальных предложений в памяти, периодически обновляемый из базы данных. Так что это не может быть просто выполнено каждый раз или что-то столь простое.

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

Ответы [ 7 ]

3 голосов
/ 14 мая 2009

Если вы можете изменить приложение delphi так, чтобы оно принимало XML-запрос и отвечало XML-ответом через сокет TCP (в идеале, используя протокол HTTP), вы сможете относительно легко взаимодействовать с большинством сред веб-серверов. Но точные детали того, как осуществить эту интеграцию, будут зависеть от языка / структуры, на которых она была написана.

Если веб-сервер работает на Windows, вы можете скомпилировать ваше приложение delphi в виде библиотеки DLL, которая может возвращать XML или HTML, принимая параметры как часть URL или операции POST. Некоторые подробности о создании Delphi DLL для веб-серверов здесь .

3 голосов
/ 14 мая 2009

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

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

2 голосов
/ 14 мая 2009

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

Нет необходимости использовать RemObjects в сервисе, но это делает его намного проще, поскольку он обрабатывает большую часть базовой сантехники. Клиентам не нужны RemObjects, им просто нужно уметь вызывать мыльные методы. Это может сделать почти любой программист.

Вы также можете создать isapi dll для IIS, который предоставляет интерфейс мыла. Это было бы полезно, если бы другим сайтам на разных серверах требовался доступ к методам. Однако в моем случае я справился с этим, открыв порт в брандмауэре для доступа к моей службе Windows.

В сети много примеров. Несколько мест для начала чтения: О.Ком и Доктор Боб .

2 голосов
/ 14 мая 2009

Неважно, на каком веб-сервере или операционной системе работает существующая система. Важно то, что вы хотите, чтобы ваш код запускался. Если это Windows, то самым простым решением было бы использовать WebBroker и написать собственное приложение ISAPI или использовать SOAP для предоставления веб-сервисов. Первый способ можно использовать, если вы хотите написать отдых, например, API, второй, если ваше веб-приложение может использовать веб-службы.

Другой вариант, если вы работаете на одном и том же компьютере в IIS, - это создать объект COM / Automation, который затем вызывается через серверные сценарии (ASP). Если приложение является приложением ASP.NET, я бы использовал PRISM для переноса вашего кода в сборку.

1 голос
/ 21 августа 2013

Популярным способом интеграции веб-приложения с фоновыми службами является брокер сообщений.

Поток сообщений будет:

  • веб-приложение отправляет сообщение «запрос на вычисление» адресату сообщения в брокере сообщений, которое содержит все необходимые параметры, а также идентификатор корреляции для сопоставления запроса на расчет с ответом от службы Delphi

  • один (или, в условиях высокой доступности / сбалансированной нагрузки) службы Delphi обрабатывают сообщения: извлекают следующее входящее сообщение, обрабатывают его, передавая параметры в механизм вычислений, и отправляют «сообщение о результате вычислений» "вернуться на веб-сервер

  • веб-сервер может либо синхронно ожидать ответа (и отбрасывать ответы, у которых нет соответствующей идеи корреляции) и создавать итоговый документ HTML, либо продолжать выполнение других задач и асинхронно получать результат вычисления в отдельном потоке, например, в веб-приложении на основе Ajax

См. Введение в этом слайд-шоу о сервисе изображений Dopplr:

http://de.slideshare.net/carsonified/dopplr-its-made-of-messages-matt-biddulph-presentation

made of messages by matt biddulph

1 голос
/ 14 мая 2009

Разорвало это приложение в Windows Service. Напишите веб-службу, которая будет взаимодействовать с вашей службой Windows. Вы должны потратить некоторое время на разработку своего веб-сервиса, потому что этот веб-сервис станет вашим непротиворечивым интерфейсом, защищающим старое приложение Delphi. Поэтому в будущем, когда вам захочется написать веб-приложение, мобильное приложение или что-либо еще, вы будете иметь один непротиворечивый интерфейс - XML ​​Web Service.

0 голосов
/ 14 мая 2009

Если вы можете сделать это службой (но не библиотекой), вы должны каким-то образом осуществлять межпроцессное взаимодействие - в Windows есть несколько способов сделать это:

Сокеты напрямую, что сложнее всего, так как вы должны выполнить маршалинг / авторизацию самостоятельно Общая память (чёрт!) RPC, который отлично работает, но не тривиален DCOM, который проще, но боль в настройке WCF - но можете ли вы позвонить из службы Windows, написанной на Delphi?
...