Недостатки создания экземпляра WinForm внутри ASP. NET MVC метода контроллера - PullRequest
0 голосов
/ 06 февраля 2020

Как указано в названии, я работаю над устаревшим проектом ASP. NET MVC, в котором я нашел нетипичные логики c. Иногда в бэкэнде несколько частных методов (вызываемых каким-либо контроллером в некоторых условиях) создают экземпляр всей WinForm (из другого проекта, на который ссылаются как .dll) для повторного использования этого logi c (publi c метод этой WinForm).

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

Поэтому я хотел бы спросить, является ли это проблемой, которую необходимо решить, или это просто странный подход без реальных недостатков.

---- РЕДАКТИРОВАТЬ: добавлен код примера

public ActionResult ShowPurcheaseorderById (int poId)
{
    PurcheaseOrderBiz po = new PurcheaseOrderBiz();
    return PartialView(po.GetById(poId));
}

В классе biz

public PurcheaseOrder GetById ( int poId )
{
    //some code here
    if ( _userNeedToKnowSomething )
    {
        NotificationHelper.NotifyToUser(message);
    }
}

В классе помощника stati c

public static void NotifyToUser ( string message )
{
    frmWarning wrn = new frmWarning();
    wrn.Message = message;

    wrn.Show();
}

Я хотел бы подчеркнуть, что это только пример (так что вымышленный код) real дело гораздо сложнее; но я надеюсь дать вам идею.

Когда я запускаю ее с отладчиком, подключенным к IIS, страница возвращает свое содержимое (не имеет ничего общего с frmWarning, ради простоты представьте, что это изображение). PO) и немного WinForm отображается на моем рабочем столе (которые показывают сообщение)

1 Ответ

1 голос
/ 10 февраля 2020

Я создал пример MVC приложения, которое выбирает какое-то свойство приложения Winforms, которое присутствует только при нажатии определенной кнопки в форме.

При запуске приложения MVC на моем локальном компьютере На компьютере машина Winform отображается каждый раз при запросе действия MVC:

enter image description here

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

Решение может заключаться в том, чтобы убедиться, что вы удаляете форму в контроллере MVC , когда она больше не нужна:

public ActionResult Index()
{
    string dataFromTheWinform = null;
    using (MyWinformsApp.Form1 temp = new MyWinformsApp.Form1())
    {
        temp.Show();
        temp.button1.PerformClick();
        dataFromTheWinform = temp.GetMyString();
        temp.Close();
    }

    ViewBag.MyString = dataFromTheWinform;

    return View("Index");
}

Форма все еще отображается, но закрывается до отправки ответа клиенту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...