我试图为我的MVC操作创建性能计数器,并收到一个SecurityException,表示注册表访问被拒绝。我已经为我的web.config文件添加了完全信任,但这并没有解决问题。
PerformanceCounterCategory performancecountercategory = null;
if (!PerformanceCounterCategory.Exists(categoryname))
{
performancecountercategory = PerformanceCounterCategory.Create(categoryname, "Latency counters for the Media Gateway", PerformanceCounterCategoryType.SingleInstance, countercreationdata);
}
else
{
performancecountercategory = new PerformanceCounterCategory(Constants.PerformanceCounterCategory);
}
<system.web>
<trust level="Full"></trust>
<compilation targetFramework="4.5" debug="true" />
<httpRuntime targetFramework="4.5" />
答案 0 :(得分:3)
这不是中等信托/完全信任问题。您需要以管理员或其他特权用户身份运行才能在计算机上创建性能计数器。请参阅http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecountercategory(v=vs.110).aspx的备注部分:
强烈建议使用新的性能计数器类别 在安装应用程序期间创建,而不是在安装期间 执行申请。
基本上,如果您的应用程序有安装程序,则在安装时调用PerformanceCounterCategory.Create。如果您的应用程序没有安装程序,您可以使用此代码编写.exe并从提升的命令提示符运行它。
然后,作为MVC应用程序正常执行的一部分,您可以通过使用标准PerformanceCounter类打开计数器并向其写入值来利用此性能计数器已存在的事实。