Служба Msmq и WCF

Я создал службу WCF, используя привязку NetMsmq, для которой я создал частную очередь на своем компьютере и выполнил проект. Это нормально работает, и моя служба WCF запускается и обращается к сообщению, используя очередь в среде отладки. Теперь я хотел разместить службу с помощью службы Windows, и для того же я создал новый проект и установщик Windows (эта служба работает под учетной записью локальной системы). Затем я попытался установить эту службу Windows с помощью команды InstallUtil через командную строку. Когда происходит установка и открывается сервисный узел, я получаю исключение:

There was an error opening the queue. Ensure that MSMQ is installed and running, the queue exists and has proper authorization to be read from. The inner exception may contain additional information. 
Inner Exception System.ServiceModel.MsmqException: An error occurred while opening the queue:Access is denied. (-1072824283, 0xc00e0025). The  message cannot be sent or received from the queue. Ensure that MSMQ is installed and running. Also ensure that the queue is available to open with the required access mode and authorization.
   at System.ServiceModel.Channels.MsmqQueue.OpenQueue()
   at System.ServiceModel.Channels.MsmqQueue.GetHandle()
   at System.ServiceModel.Channels.MsmqQueue.SupportsAccessMode(String formatName, Int32 accessType, MsmqException& msmqException)

Может ли кто-нибудь предложить возможное решение вышеуказанной проблемы? Мне не хватает каких-либо разрешений, которые нужно установить для очереди, а также для службы Windows, если да, не могли бы вы предложить, где следует добавить эти разрешения?


person Sowmya    schedule 28.01.2010    source источник


Ответы (4)


У Тома Холландера была отличная серия из трех статей об использовании MSMQ из WCF - ее стоит проверить!

Возможно, вы найдете где-нибудь упомянутое решение вашей проблемы!

person marc_s    schedule 28.01.2010

Да, похоже, проблема с разрешениями.

Щелкните правой кнопкой мыши свою частную очередь в диспетчере серверов и выберите «Свойства». Перейдите на вкладку «Безопасность» и убедитесь, что у вас есть необходимые разрешения для вашей локальной системной учетной записи.

Это также подтверждается в статье Николаса Аллена: Диагностика общих ошибок очереди, где автор определяет код ошибки 0xC00E0025 как проблему с разрешениями.

person Daniel Vassallo    schedule 28.01.2010
comment
Спасибо за ответ, Даниэль. Я попытался предоставить все соответствующие разрешения для учетной записи компьютера, которая присутствует в списке, если это то, что называется локальной системной учетной записью. Но все же я получаю ту же ошибку. В созданной частной очереди используется мой домен для входа в качестве владельца. Я не знаю, какие разрешения мне нужно установить. Не могли бы вы подсказать, отсутствует ли какое-либо другое возможное разрешение? - person Sowmya; 29.01.2010
comment
Sowmya, у тебя все заработало? Если нет, то проверьте эту ссылку yondrelational.com/blogs/ibhadelia/archive/2011/06/21/ - person IBhadelia; 21.06.2011

Я столкнулся с той же проблемой, вот решение.

Щелкните правой кнопкой мыши «Мой компьютер» -> «Управление». В окне «Управление компьютером» перейдите в «Службы и приложения -> Очередь сообщений -> очередь ur», выберите очередь ur и откройте свойства. Добавьте пользователя, запускающего приложение WCF ur, и предоставьте полный доступ. Это должно решить проблему.

person Bhushan    schedule 15.07.2010

Просто может случиться так, что служба не может найти свою очередь. Имя очереди должно точно соответствовать адресу конечной точки.

Пример:

net.msmq: //localhost/private/wf.listener_srv/service.svc

указывает на местную очередь

частный $ \ wf.listener_srv \ service.svc

Если имя очереди и конечная точка соответствуют друг другу, то это больше всего похоже на то, что учетные данные, определенные в IIS pool, не предоставляют доступ к очереди.

person MiguelSlv    schedule 01.06.2016