我需要从Azure上运行IIS-8的WebRole收集以下两个信息。
由于我们使用的是Azure云服务,因此我认为最好与Azure提供的默认IIS配置结合使用。
方法1:使用WorkerProcess请求收集
public void EnumerateWorkerProcess()
{
ServerManager manager = new ServerManager();
foreach (WorkerProcess proc in manager.WorkerProcesses)
{
RequestCollection req = proc.GetRequests(1000);
Debug.WriteLine(req.Count);
}
}
缺点:
要求在IIS中显式启用RequestMonitor。
方法2:使用PerformanceCounter类
public void ReadPerformanceCounter()
{
var root = HostingEnvironment.MapPath("~/App_Data/PerfCount.txt");
PerformanceCounter counter = new PerformanceCounter(@"ASP.NET", "requests current", true);
float val = counter.NextValue();
using (StreamWriter perfWriter = new StreamWriter(root, true))
{
perfWriter.WriteLine(val);
}
}
缺点: 需要比当前运行IIS进程更高的权限。
P.S。 有一个four years old SO post但没有得到很好的解答。