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 が返されるのはなぜですか? 私は何を試してみるべきだと思いますか?