我的机器是Windows 7终极版(64位)。我已经安装了MSMQ并检查它是否正常工作(为MSMQ运行了一些示例代码)。
当我尝试使用MsmqIntegrationBinding类创建WCF服务时,我得到以下异常:
“打开队列时发生错误:队列不存在或者您没有足够的权限来执行操作。(-1072824317,0xc00e0003)。无法从队列发送或接收消息。确保MSMQ已安装并正在运行。还要确保可以使用所需的访问模式和授权打开队列。“
我正在以管理员模式运行visual studio,并使用以下命令通过URL ACL显式授予我自己的权限: netsh http add urlacl url = http://+:80/ user = DOMAIN \ 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();
}
}
你能帮忙吗?
答案 0 :(得分:3)
确保您已在MSMQ中创建了“订单”队列。
在Windows Server 2008中,您可以从服务器管理器(右键单击“我的电脑”并选择“管理”),然后选择“功能” - >消息队列 - &gt;私人队列。右键单击Private Queues并在那里添加“Orders”队列。
您可能还想查看Nicholas Allen的文章:Diagnosing Common Queue Errors。它表明您的错误只能是:“队列不存在,或者您可能错误地指定了队列名称”。所有其他错误情况都会抛出不同的异常。