Лучший способ для.Net Windows service, чтобы сообщить об ошибке пользователю

В этом интервью, Guido van Rossum говорит, что ему жаль, что он не позволил 'лямбде' в Python:

" Q. Какой функцией Python Вы меньше всего довольны?

Иногда я был слишком быстр в принятии вкладов, и позже понял, что это была ошибка. Одним примером были бы некоторые функции функционального программирования, такие как функции лямбды. лямбда является ключевым словом, которое позволяет Вам создать маленькую анонимную функцию; встроенные функции, такие как карта, фильтр, и уменьшают, выполняет функцию по типу последовательности, такому как список.

На практике, это не оказалось этим хорошо. Python только имеет два объема: локальный и глобальный. Это делает функции лямбды записи болезненными, потому что Вы часто хотите к переменным доступа в объеме, где лямбда была определена, но Вы не можете из-за двух объемов. Существует путь вокруг этого, но это - что-то вроде клуджа. Часто кажется намного легче в Python просто использовать для цикла вместо того, чтобы бездельничать с функциями лямбды. карта и друзья работают хорошо только, когда уже существует встроенная функция, которая делает то, что Вы хотите.

, по моему скромному мнению, Iambdas могут иногда быть удобными, но обычно удобны за счет readibility. Можете Вы говорить мне, что это делает:

str(reduce(lambda x,y:x+y,map(lambda x:x**x,range(1,1001))))[-10:]

я записал его, и мне потребовалась минута для понимания его. Это от Euler Проекта - я не скажу, какую проблему, потому что я ненавижу спойлеры, но это выполняет через 0,124 секунды:)

6
задан Phil 11 December 2009 в 16:04
поделиться

6 ответов

Рассмотрите возможность использования журнала событий и отдельного приложения только для мониторинга. Вы также можете использовать электронную почту или MSMQ.

7
ответ дан 8 December 2019 в 05:55
поделиться

Обычно у вас есть дополнительное приложение, о котором служба может уведомить. Например, у вас может быть значок на панели задач (тьфу), который всплывает (двойное тьфу), когда происходит что-то важное. Само приложение может затем предоставить интерфейс для настроек вашей службы.

5
ответ дан 8 December 2019 в 05:55
поделиться

Как насчет использования другого приложения для взаимодействия с этим приложением и уведомления пользователя об ошибках? Таким образом, у вас может быть «выбор» для пользователей. Можно отключить оповещения, электронную почту и т. Д.

4
ответ дан 8 December 2019 в 05:55
поделиться

Вы можете использовать какое-нибудь существующее приложение для уведомлений, например Growl: http://www.growlforwindows.com/gfw/ . Это позволит пользователю «выбрать».

3
ответ дан 8 December 2019 в 05:55
поделиться

Чтобы решить эту проблему, я создал приложение Windows Forms, которое пользователь может запускать и останавливать по своему желанию. Конечно, служба Windows работает в фоновом режиме 24/7. Когда приложение запускается, оно использует Windows Communication Foundation (WCF) для запроса службы о ее текущем состоянии - активна ли она, сколько клиентов подключено, сколько байтов было собрано и т. Д. Эта информация затем представляется пользователю. внутри приложения.

Я попытался имитировать поведение диспетчера задач, поэтому я также добавил System.Windows.Forms.NotifyIcon в основную форму приложения, которая отображает значок в системном трее. Когда приложение открыто, отображается значок на панели задач. Пользователь может свернуть приложение до панели задач или вообще скрыть приложение. Значок в трее исчезает только тогда, когда пользователь закрывает приложение. Значок в трее также поддерживает двойной щелчок для повторного открытия приложения и всплывающее меню для быстрого доступа к функциям.

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

Я хочу подчеркнуть, что WCF - это наиболее простой способ взаимодействия вашей службы и интерфейсного приложения. Люди будут спорить о предполагаемой «крутой» кривой обучения, связанной с WCF, но я этого не испытал. Я считаю, что WCF - очень эффективный способ развития межпроцессного взаимодействия. Вы можете посмотреть это видео , чтобы получить представление о парадигме программирования WCF.

Я хочу подчеркнуть, что WCF - это наиболее простой способ взаимодействия вашей службы и интерфейсного приложения. Люди будут спорить о предполагаемой «крутой» кривой обучения, связанной с WCF, но я этого не испытал. Я считаю, что WCF - очень эффективный способ развития межпроцессного взаимодействия. Вы можете посмотреть это видео , чтобы получить представление о парадигме программирования WCF.

1
ответ дан 8 December 2019 в 05:55
поделиться

You will have to provide an alternative to the "interact with desktop" option. It is no longer supported in Vista and Win7. Giving a restricted user access to an UI that runs on a highly privileged account was considered too great a security risk. Google "session 0 isolation" to find details on this.

You'll need to use one of the process interop mechanisms supported by .NET to setup interaction between your service and a UI app. For simple message passing use either a socket or named pipe. The pipe name needs to have the "Global\" prefix to be visible to all sessions. For more intricate interactions you can use Remoting or WCF.

Be sure to deal with the possibility that the user decides to not run or kill off the desktop app. You should log any error with the EventLog class.

2
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: