使用Powershell方法时,为什么MSMQ上的计数消息返回0?

时间:2012-11-23 15:18:31

标签: c# wcf iis wmi msmq

我正在开发一个在IIS上运行的WCF服务,我需要为MSMQ中的每个私有队列计算消息i =。最快的方式似乎是powershell方法。

基准点在这里:

http://www.codeproject.com/Articles/346575/Message-Queue-Counting-Comparisions

在Visual Studio 2012上进行调试时,它运行良好,但在本地IIS 7.5服务器上部署时,它返回0.

以下是我正在使用的方法:

private int GetPowerShellCount()
{
    return GetPowerShellCount(".\\private$\pingpong", Environment.MachineName, "", "");
}

private  int GetPowerShellCount(string queuePath, string machine,string username, string password)
{
    var path = string.Format(@"\\{0}\root\CIMv2", machine);
    ManagementScope scope;
    if (string.IsNullOrEmpty(username))
    {
            scope = new ManagementScope(path);
    }
    else
    {
        var options = new ConnectionOptions {Username = username, Password = password};
        scope = new ManagementScope(path, options);
    }
    scope.Connect();
    if (queuePath.StartsWith(".\\")) queuePath=queuePath.Replace(".\\",string.Format("{0}\\",machine));

    string queryString = String.Format("SELECT * FROM Win32_PerfFormattedData_msmq_MSMQQueue");
    var query = new ObjectQuery(queryString);
    var searcher = new ManagementObjectSearcher(scope, query);
    IEnumerable<int> messageCountEnumerable =
        from ManagementObject queue in searcher.Get()
        select (int)(UInt64)queue.GetPropertyValue("MessagesInQueue");
    //IEnumerable<string> messageCountEnumerable =
    //  from ManagementObject queue in searcher.Get()
    //  select (string)queue.GetPropertyValue("Name");
    var x = messageCountEnumerable.First();
    return x;
}

请注意我没有使用user / pass params,所以它都是本地的(同一台机器上的WCF服务和MSMQ)。

为什么在部署到IIS时它返回0? 您认为我应该尝试什么?

1 个答案:

答案 0 :(得分:0)

您的问题可能与IIS特定行为有关。

看看Tom Hollander的博客:MSMQ, WCF and IIS: Getting them to play nice (Part 1)

  

通常,可以随意调用消息队列。然而   当您在IIS 7 WAS中托管启用MSMQ的服务时,队列   name 必须匹配服务的.svc文件的URI。在这个例子中   我们将在名为 MsmqService 的应用程序中托管该服务   使用名为 MsmqService.svc 的.svc文件,因此队列必须是   名为 MsmqService / MsmqService.svc