Исключение при создании службы WCF с использованием MsmqIntegrationBinding
-
21-09-2019 - |
Вопрос
На моем компьютере установлена Windows 7 ultimate (64-разрядная версия).Я установил MSMQ и проверил, что он работает нормально (выполнил несколько примеров кодов для MSMQ).
Когда я пытаюсь создать службу WCF с помощью класса MsmqIntegrationBinding, я получаю приведенное ниже исключение:
"При открытии очереди произошла ошибка: очередь не существует или у вас недостаточно прав для выполнения операции.(-1072824317, 0xc00e0003).Сообщение не может быть отправлено или получено из очереди.Убедитесь, что MSMQ установлен и запущен.Также убедитесь, что очередь доступна для открытия с требуемым режимом доступа и авторизацией ".
Я запускаю Visual Studio в режиме администратора и явно предоставляю разрешение самому себе через URL ACL, используя:netsh http добавить urlacl url=http://+:80/ пользователь=ДОМЕН\user
Ниже приведен код:
public static void Main()
{
Uri baseAddress = new Uri(@"msmq.formatname:DIRECT=OS:AJITDELL2\private$\Orders");
using (ServiceHost serviceHost = new ServiceHost(typeof(OrderProcessorService), baseAddress))
{
MsmqIntegrationBinding serviceBinding = new MsmqIntegrationBinding();
serviceBinding.Security.Transport.MsmqAuthenticationMode = MsmqAuthenticationMode.None;
serviceBinding.Security.Transport.MsmqProtectionLevel = System.Net.Security.ProtectionLevel.None;
//serviceBinding.SerializationFormat = MsmqMessageSerializationFormat.Binary;
serviceHost.AddServiceEndpoint(typeof(IOrderProcessor), serviceBinding, baseAddress);
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("The service is running in the following account: {0}", WindowsIdentity.GetCurrent().Name);
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown the service.
serviceHost.Close();
}
}
Не могли бы вы, пожалуйста, помочь?
Решение
Убедитесь, что вы создали очередь "Заказы" в MSMQ.
В Windows Server 2008 вы можете сделать это из диспетчера серверов (щелкните правой кнопкой мыши на "Мой компьютер" и выберите "Управление"), затем Функции -> Очередь сообщений -> Частные очереди.Щелкните правой кнопкой мыши на Частных очередях и добавьте туда свою очередь "Заказов".
Возможно, вы также захотите ознакомиться со статьей Николаса Аллена: Диагностика распространенных ошибок очереди.Это говорит о том, что ваша ошибка может быть только: "что очередь не существует, или, возможно, вы неправильно указали имя очереди".Все остальные случаи ошибок вызвали бы другое исключение.