Вопрос

Я пытаюсь перенести простое приложение 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), — это предоставить функциональность WinForms веб-части через локальное удаленное взаимодействие .NET, сделав ее своего рода прокси-сервером между устаревшим кодом и веб-приложением.На самом деле мне нужна была бы только коммуникационная часть, без форм.В этом случае веб-приложение должно будет получить доступ к этой функции через .NET Remoting (локально).

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top