У меня есть веб-приложение ASP.NET, развернутое на одном компьютере, и служба Windows C #, которая развернута на другом компьютере.
Каждый раз, когда пользователь делает новую публикацию через веб-приложение, я хочу немедленно отправить сигнал службе Windows, чтобы начать обработку этой информации.
Мне не нужно передавать какие-либо параметры - просто сигнал о том, что пора начинать обработку для нового куска данных, хранящихся в базе данных.
Было бы неплохо, если бы служба Windows получила сигнал обработки от веб-приложения в течение ~ 200 миллисекунд.
Первоначально я выбрал встраивание WCF в Windows Service и использование NetTcpBinding.
Однако WCF оказался неудачным выбором:
1) Требуется множество нетривиальных мерзких кодировок / настроек.
2) Это ужасно медленно - в настоящее время для простого вызова требуется 20 секунд (!) Для вызова с одного компьютера на другой, в то время как пинг между этими компьютерами занимает менее 1 миллисекунды.
3) Команда WCF от Microsoft жалка на [отсутствие] ответов на жалобы разработчиков (Google http://www.google.com/search?q=wcf+client+slow и посмотрите сами).
Так что я ищу хорошую альтернативу.
В настоящее время мой выбор № 1 - System.Net.Sockets.Socket:
http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.aspx
Пример в статье кажется простым и менее сложным, чем чудовище WCF.
Как вы думаете, это был бы хороший выбор, и если да - есть ли готы?
Есть ли лучший подход?
Операционные системы: Windows Server 2008 (производство), Windows 7 (разработка).
Я уже решил проблему с постановкой в очередь нескольких запросов: если winservice получает несколько запросов на обработку, он просто обрабатывает данные, пока все новые данные не будут полностью обработаны.
Обновление 1: почему даунтинг?
Обновление 2:
Это может быть нормально, чтобы иногда терять сигнал. Я все равно перерабатываю новые сообщения в winservice каждую минуту. Я просто хочу убедиться, что большинство сообщений обрабатываются практически сразу после того, как пользователь их сохранил.