Перенос графического интерфейса Windows C# в веб-приложение C#:как заставить его работать «из коробки» для Win, Mac и Linux?
Вопрос
Я хотел бы переписать приложение, которое в настоящее время работает как графический интерфейс Windows на C#.Проблема в том, что он хорошо работает в Windows, но не адаптирован для Mac и Linux из-за проблем с графическим интерфейсом Mono.
Поэтому моя идея заключалась в том, чтобы продолжить использовать C# (необходимый из-за важной подпрограммы, которая должна запускать C# и не может быть перенесена) и попытаться переписать его как веб-приложение, к которому любой пользователь Windows, Mac или Linux мог бы легко получить доступ и сделать это работает.
Также важно, чтобы мое приложение продолжало работать «из коробки», поскольку оно нацелено на высокую доступность.
Я искал такие решения, как:
- КаякHTTP но он не поддерживает данные POST!(необходим для веб-интерфейса)
- XSP2 из Mono и создать веб-приложение ASP.NET MVC, но действительно ли оно будет работать с моим веб-приложением для создания готового приложения?
В качестве альтернативы, есть ли у вас какая-либо другая идея, чтобы веб-приложение C # работало «из коробки» для конечных пользователей?Единственное, что нужно, — это установить Mono на Mac и Linux.
Большое спасибо за Вашу помощь.
РЕДАКТИРОВАТЬ 1 :Я понимаю, что не все правильно объяснил.Фактически в моем проекте есть 2 приложения:
- Приложение CORE, написанное на C# и слишком большое для портирования или переписывания, поэтому для работы на Mac и Linux необходимо использовать Mono.
- Мое приложение с графическим интерфейсом, использующее Windows Forms, которое также написано на C# и управляет приложением CORE.
Моя цель — преобразовать мое приложение с графическим интерфейсом в приложение веб-приложения, чтобы больше не было проблем с графическим интерфейсом Windows Forms на Mac и Linux.
Решение
Необходимо ли, чтобы ваше основное приложение запускалось на клиенте?
Если НЕТ, то лучший подход — переписать все как веб-приложение (ASP.NET), которое будет работать на сервере Windows.Пользователи на всех ваших целевых платформах будут получать доступ к этому приложению через веб-браузер.
Если ДА, то веб-приложение — не лучшая идея.Вы действительно не хотите, чтобы вашим клиентам требовался веб-сервер.У вас есть две возможности:
- Взгляните на Наборы инструментов графического интерфейса доступен для моно и выберите тот, который доступен на всех ваших целевых платформах, чтобы избежать разных интерфейсов для каждой из ваших платформ.
- Чтобы обеспечить наилучшее взаимодействие с пользователем на всех платформах, вам следует выбрать собственный набор инструментов графического интерфейса для каждой из платформ и написать для них отдельный интерфейс:либо используя Mono, либо используя собственную среду разработки, если ваше основное приложение имеет интерфейс, к которому можно получить доступ из него (например,командная строка или что-то подобное).
Другие советы
Это повторяющийся вопрос, но у меня нет времени искать дубликат.
Вкратце, ответ таков:не делай этого.Вы не можете перевести настольное приложение в веб-приложение по принципу «один к одному»:эти две парадигмы слишком различны.
Вместо этого я рекомендую провести рефакторинг вашего текущего приложения, чтобы удалить все зависимости от графического интерфейса.Затем напишите совершенно новое веб-приложение, отвечающее требованиям, и пусть веб-приложение вызовет код, который вы реорганизовали из настольного приложения.
Помните о большой скрытой разнице между двумя платформами:веб-приложение будет работать на сервере.Он будет использоваться несколькими пользователями одновременно и несколькими потоками одновременно.Во время рефакторинга обязательно обратите внимание на любой код, который будет чувствителен к разнице.Например, код, который использует static
поля участников теперь могут работать в настольном приложении, поскольку одновременно существует только один пользователь.В веб-приложении это static
будут доступны всем пользователям и всем потокам.
Возможно, это не то, что вы имели в виду.