Взаимодействие веб-приложения с унаследованным кодом

Я пытаюсь перенести простое приложение WinForms в веб-приложение ASP.Net. Приложение WinForms в основном является только уровнем представления для сложного простого приложения C и взаимодействует с устаревшим кодом через COM-взаимодействие. У меня скромный опыт работы с ASP.Net, javascript, jQuery и большой опыт работы с WinForms и взаимодействием, поэтому я знаю основы, мне просто нужно принять решение по дизайну.

Сейчас приложение выглядит так:

  1. Существует куча устаревшего кода C (даже не C++), который может быть изменен и перекомпилирован, но перенос невозможен. Это уровень бизнес+данные, называйте его как хотите. Я буду называть его устаревшим кодом.

  2. При запуске устаревший код создает экземпляр COM-сервера, который используется для представления и взаимодействия с пользователем. Данные презентации сериализуются и отправляются в этот COM-объект («Я отправляю вам некоторые выходные данные»), а взаимодействие с пользователем достигается посредством циклического опроса («У вас есть какие-либо данные для меня? ?"). Не самое красивое решение, но чертовски простое.

  3. COM-объект на самом деле представляет собой приложение .NET 2.0 WinForms, представленное как COM. Это приложение также предоставляет некоторые функции другим приложениям .NET через .NET Remoting, но это также не так важно.

Хотя система довольно сложная, приложение WinForms действительно используется только для взаимодействия, поэтому переключиться на веб довольно просто. В чем я не уверен, так это в том, как лучше всего сделать веб-сервер ‹---> взаимодействие с устаревшим кодом.

Первое, что приходит мне в голову (поскольку я уже внедрил .NET Remoting), — это предоставить функциональность WinForms веб-части через локальное .NET Remoting, заставив его действовать как своего рода прокси между устаревшим кодом и веб-приложением. На самом деле мне нужна была бы только коммуникационная часть, без форм. В этом случае веб-приложение должно будет получить доступ к этой функции через .NET Remoting (локально).

Целесообразно ли, чтобы веб-приложение локально взаимодействовало с другим приложением с помощью .NET Remoting? Кроме того, я мог бы изменить приложение на службу Windows, но смогу ли я по-прежнему предоставлять его функциональность через COM для устаревшего кода?

Что было бы лучшим способом для достижения этого? Обратите внимание, что я также могу внести некоторые изменения в устаревший код, если это необходимо.


person Groo    schedule 03.12.2009    source источник


Ответы (2)


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

10 лет назад я участвовал в нескольких веб-проектах, в которых мы запускали бизнес-логику в виде COM-объектов (VB6) в MTS, а затем в COM+. Принадлежность этих COM-объектов к сеансам была запрещена, потому что, если пользователи приходят и уходят много, вы можете в конечном итоге получить много ресурсов, связанных с неиспользуемыми, но живыми COM-объектами.

Я бы посоветовал вам изучить запуск ваших COM-объектов в службах компонентов. Возможно, это не РЕШЕНИЕ, но его стоит изучить.

Размещение COM-объектов в службах компонентов максимально близко к написанию службы Windows, доступной через COM — то, что я бы коснулся для всех x в y : где x — любимая еда, а y — любимое место.

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

person Guge    schedule 04.12.2009
comment
Благодарю за ваш ответ. У меня нет опыта работы с Component Services, поэтому сначала я проверю это. - person Groo; 06.12.2009

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

Пожалуйста, ознакомьтесь с моим непосредственным предложением фреймворка, который делает именно это: http://www.visualwebgui.com/landing/wow.aspx

Надеюсь, это поможет…

person user219263    schedule 06.12.2009
comment
Спасибо. Но графический интерфейс настолько прост, что у меня нет проблем с переносом его в Интернет. Проблема в том, что приложение WinForms действует как COM-сервер для простого приложения C, которое фактически создает его экземпляр. Вот эта активация меня и смущает. - person Groo; 06.12.2009