Мне разместили сервис WCF в службе Windows, которую я установил на Автоматический, таким образом, это запустится автоматически, когда сервер будет поднят. Сервис является конечной точкой, поддержанный MSMQ.
Когда я запускаю сервис вручную, все хорошо. Но когда сервис запускается на начальной загрузке, я получаю исключение MSMQ:
System.TypeInitializationException: The type initializer for
'System.ServiceModel.Channels.Msmq' threw an exception. --->
System.ServiceModel.MsmqException: The version check failed with the error:
'The Message Queuing service is not available (-1072824309, 0xc00e000b)'. The
version of MSMQ cannot be detected All operations that are on the queued channel
will fail. Ensure that MSMQ is installed and is available.
at System.ServiceModel.Channels.MsmqQueue.GetMsmqInformation
(Version& version, Boolean& activeDirectoryEnabled)
at System.ServiceModel.Channels.Msmq..cctor()
--- End of inner exception stack trace ---
Кажется, что MSMQ не готов использоваться, прежде чем сервис запускается... там решение этого?
Вам необходимо добавить зависимость от MSMQ в свой узел службы WCF. Вы можете сделать это в установщике службы:
ServiceInstaller serviceInstaller = new ServiceInstaller();
// Adding this property to your ServiceInstaller forces
// your service to start after MSMQ.
serviceInstaller.ServicesDependedOn = new string[] { "MSMQ" };
Если вы не используете установщик службы, вы также можете добавить зависимость MSMQ для своей службы, отредактировав реестр Windows, как описано в « Поддержка Microsoft: Как отложить загрузка специальных сервисов ».