2

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 パラメーターを使用していないため、すべてローカル (同じマシン上の WCF サービスと MSMQ) であることに注意してください。

IIS に展開すると 0 が返されるのはなぜですか? 私は何を試してみるべきだと思いますか?

4

1 に答える 1

0

問題は IIS 固有の動作に関連している可能性があります。

Tom Hollander のブログをご覧ください: MSMQ、WCF、および IIS: Getting them to play nice (パート 1)

一般に、メッセージ キューは好きなように呼び出すことができます。ただし、IIS 7 WAS で MSMQ 対応サービスをホストしている場合、キュー名はサービスの .svc ファイルの URI と一致する必要があります。この例では、 MsmqService.svc という .svc ファイルを使用して MsmqService というアプリケーションでサービスをホストするため キューはMsmqService/MsmqService.svcという名前にする必要があります。

于 2012-11-29T15:43:45.723 に答える