c # MVC всегда работает поток? - PullRequest
0 голосов
/ 01 ноября 2018

Во-первых, я заранее прошу прощения, если это дублирующий вопрос.

Я написал службу Windows (c # .net 4.7), которая создает соединение TcpClient с моей панелью сигнализации, прослушивает входящие данные, а затем перенаправляет данные на веб-сайт, к которому я подключаю другие службы. Для надежности я хочу перенести эту функцию на веб-сайт c # MVC, чтобы я мог отслеживать его состояние (убедитесь, что он все еще подключен, тревога не сработала и т. Д.).

Я начал создавать проект MVC и в файле global.asax запускаю новый поток, который загружает / запускает класс, который я изначально создал для winService.

Application["MyTcpClass"] = new MyTcpClass();

Затем в моем HomeController я добавил опрос () ActionResult:

    public void Poll()
    {
        MyTcpClass objClass = (MyTcpClass)Application["MyTcpClass"];
        //If objClass is null, recreate/reconnect it
        objClass.Poll();
    }

Прежде чем идти дальше и начать добавлять способ возврата статусов и т. Д., Я хотел бы уточнить у всех, является ли это хорошим методом и / или есть ли лучший способ?

Заранее спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

Если вам нужно сохранить пользовательский TcpClient открытым в фоновом режиме, лучше оставить его в качестве службы Windows. ASP.NET только усложнит это.

Для одного (при условии, что вы разместите его в IIS) IIS по умолчанию отключит веб-сайты, если они не получили никаких входящих запросов в течение 20 минут. Вы можете полностью отключить это поведение, но все еще ненадежно ожидать, что IIS будет поддерживать ваше приложение на 100% времени. Веб-сайты предназначены для ответа на HTTP-запросы, а не для выполнения фоновых задач.

Если вы хотите создать веб-сайт, на котором вы можете проверить, что делает ваш сервис, то один из способов сделать это - использовать HttpListener в вашем сервисе, чтобы сделать веб-сервис, который будет вашим веб-приложением. может позвонить. Я делал это раньше в проекте, над которым работал. Вот пример того, как использовать это здесь: https://www.codeproject.com/Articles/599978/An-HttpListener-Server-for-Handling-AJAX-POST-Requ

Обновление: Я нашел этот пример слишком занятым, поэтому я создал свой собственный на основе прошлого проекта, который я сделал: http://www.gabescode.com/dotnet/2018/11/01/basic-HttpListener-web-service.html

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