2012-03-10 4 views
1

Я хотел бы переписать приложение, которое в настоящее время работает как графический интерфейс Windows на C#. Проблема в том, что он хорошо работает в Windows, но не адаптирован для Mac и Linux из-за проблем с GUI с помощью Mono.Портирование C# Windows GUI на веб-приложение C#: как заставить его работать из-за-коробки для Win, Mac и Linux?

Итак, моя идея состояла в том, чтобы продолжить работу с C# (необходимо из-за важной подпрограммы, которая должна запускаться на C# и не может быть перенесена) и попытаться переписать ее как веб-приложение, которое любой пользователь на Windows, Mac или Linux мог бы легко получить доступ и заставить его работать.

Также важно, чтобы мое приложение оставалось работать «из коробки», потому что оно предназначено для высокой доступности.

Я искал решения, как:

  • KayakHTTP, но он не поддерживает данные POST! (необходимо для веб-графического интерфейса)
  • XSP2 от Mono и сделать веб-приложение ASP.NET MVC, но действительно ли это будет работать с моим веб-приложением, чтобы сделать готовое приложение?

В качестве альтернативы, есть ли у вас какие-либо другие идеи для того, чтобы у меня было веб-приложение C# для конечных пользователей? Единственное, что нужно было установить Mono на Mac и Linux.

Большое спасибо за помощь.

EDIT 1: Я понимаю, что я не объяснил все аспекты правильно. На самом деле, есть 2 приложений в моем проекте:

  • сердцевине приложение, которое написано в C# и слишком большой, чтобы быть перенесен или переписаны и, следовательно, должны использовать Mono для работы на Mac и Linux
  • Мой GUI приложения с использованием Windows Forms, который написан на C# тоже и контролирует применение CORE

Моя цель состоит, чтобы преобразовать мой GUI приложения в приложение веб-приложения, так что это не более GUI изводить Windows Forms на Mac и Linux.

+1

Это может быть меньше работы по созданию 3-х губ. Дает вам стимул держать его в покое ... –

+0

Я не понимаю. Есть приличные браузеры во всех трех упомянутых ОС. Веб-приложение не должно даже требовать ничего, установленного на стороне клиента (за исключением, возможно, для некоторых фэнтезийных флеш-файлов или Silverlight или java-исполнения). И серверная сторона (часть неклиента) в большинстве случаев гораздо менее проблематична. – Sascha

+0

Я отредактировал свое сообщение, на самом деле есть приложение CORE, которое я не могу изменить и должен иметь дело, потому что он слишком велик, чтобы его можно было изменить в любом случае. Это приложение CORE контролируется моим графическим интерфейсом, которое нужно запускать на всех ОС. – virrea

ответ

1

Нужно ли для вашего основного приложения работать на клиенте?

Если нет, то наилучшим подходом является переписать все как приложение для веб-страниц (ASP.NET), которое будет запускаться на сервере Windows. Пользователи на всех ваших целевых платформах будут получать доступ к этому приложению через веб-браузер.

Если ДА, то веб-приложение не является хорошей идеей. Вы действительно не хотите, чтобы на ваших клиентах требовался веб-сервер. У вас есть две возможности:

  • Взгляните на GUI toolkits доступной для моно и выбрать тот, который доступен на всех целевых платформах, чтобы избежать интерфейсам для каждого из платформ.
  • Для обеспечения наилучшего удобства пользователей на всех платформах вы должны выбрать собственный набор инструментов GUI для каждой из платформ и написать для них другой интерфейс: либо с помощью Mono, либо с использованием собственной среды разработки, если ваше основное приложение имеет интерфейс из которого можно получить доступ (например, в командной строке или аналогичной).
+0

Спасибо за ваш ответ. После прочтения страницы Mono для GUI Toolkits, если я хорошо понимаю, я могу просто продолжать использовать System.Windows.Forms, убедившись, что он будет поддерживаться с использованием чего-то вроде Mono Migration Analyzer? Кроме того, я бы очень хотел использовать только один инструментарий GUI, чтобы поддерживать время разработки и усилия на низком уровне. – virrea

+0

@virrea Точно. Если вы не используете сторонние элементы управления в зависимости от собственных вызовов, есть большой шанс, что ваш интерфейс WinForms будет работать в Mono. Если нет, вам может понадобиться какое-то усилие и изменения для его порта. Я знаю, по крайней мере, один успешный порт приложения WinForms для Mono. [Здесь] (http://www.mono-project.com/Winforms_Samples) также есть несколько приложений WinForms, которые работают над Mono. –

+0

Спасибо, я посмотрю на эти образцы и попробую их на каждой платформе. – virrea

0

Это дублированный вопрос, но у меня нет времени, чтобы найти дубликат.

Вкратце, ответ таков: не делайте этого. Вы не можете перевести настольное приложение в веб-приложение на основе одного: две парадигмы слишком разные.

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

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

Возможно, это не то, что вы имели в виду.