使用MsmqIntegrationBinding创建WCF服务时的异常

时间:2009-12-23 11:57:53

标签: wcf msmqintegrationbinding

我的机器是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();
        }
    }

你能帮忙吗?

1 个答案:

答案 0 :(得分:3)

确保您已在MSMQ中创建了“订单”队列。

在Windows Server 2008中,您可以从服务器管理器(右键单击“我的电脑”并选择“管理”),然后选择“功能” - >消息队列 - &gt;私人队列。右键单击Private Queues并在那里添加“Orders”队列。

您可能还想查看Nicholas Allen的文章:Diagnosing Common Queue Errors。它表明您的错误只能是:“队列不存在,或者您可能错误地指定了队列名称”。所有其他错误情况都会抛出不同的异常。