Веб-приложение для взаимодействия старого кода - PullRequest
2 голосов
/ 03 декабря 2009

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 04 декабря 2009

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

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

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

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

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

1 голос
/ 06 декабря 2009

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

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

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

...