2015-03-23 5 views
4

У меня есть самообслуживаемая служба WCF (выполняется внутри службы Windows). Эта служба прослушивает сообщения в MSMQ. Служба PerCall и Transactional работает в Windows 2008 R2, .NET 4.0, MSMQ 5.0.WCF Net.Msmq Service изредка ошибки

Раз в две недели служба прекращает обработку сообщений. Служба Windows остается запущенной, но сам хост WCF останавливается. Разломы ServiceHost со следующим исключением:

Отметка: 3/21/2015 5:37:06 PM Сообщение: HandlingInstanceID: a26ffd8b-d3b4-4b89-9055-4c376d586268 Исключение типа «system.serviceModel .MsmqException 'произошел и был пойман. ------------------------------------------------- -------------------------------- 03/21/2015 13:37:06 Тип: System.ServiceModel.MsmqException, System.ServiceModel, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 Сообщение: Произошла ошибка, когда принимает сообщение из очереди: Операция транзакции последовательность неверна. (-1072824239, 0xc00e0051). Убедитесь, что установлен и запущен MSMQ . Убедитесь, что очередь доступна для приема . Источник: System.ServiceModel Помощь ссылка: ErrorCode: -1072824239 данных: System.Collections.ListDictionaryInternal TargetSite: Boolean TryReceive (System.TimeSpan, System.ServiceModel.Channels.Message ByRef) dynatrace_invocationCount : 0 Трассировка стека: на системе. ServiceModel.Channels.MsmqInputChannelBase.TryReceive (TimeSpan тайм-аут, сообщение & сообщение) на System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive (TimeSpan тайм-аут, RequestContext & RequestContext) в System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive (TimeSpan timeout, RequestContext & requestContext)

Поиск конкретного исключения («Неверная последовательность транзакций») не дает много информации. И большинство предложений о том, как исправить неисправные службы, - это перезапустить servicehost в случае сбоя.

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

ответ

0

У нас такая же проблема в нашей производственной среде. К сожалению, есть issue opened with Microsoft об этом, но оно помечено «Закрыто в Отложенный» с 2013 года следующий обходной упомянута EasySR20:

Если вы установили ReceiveTimeout сервиса несколько секунд меньше, чем transactionTimeout в сервиса этой предотвратит исключение из , которое произойдет и удалит хост службы. Это обе настройки , которые могут быть установлены в файле app.config сервера.

Я не подтвердил, что это разрешает проблему, но это один из вариантов.

Вместо этого мы внедрили параметр перезапуска службы.