zoukankan      html  css  js  c++  java
  • wf工作流 请求的性能计数器不是自定义计数器,它必须初始化为 ReadOnly 问题处理

    安装了 vs2008后,创建了一个最简单的控制台顺序工作流,执行之后,出现异常:

    未处理的异常:  System.InvalidOperationException: 请求的性能计数器不是自定义计数器,它必须初始化为 ReadOnly。
       在 System.Diagnostics.PerformanceCounter.Initialize()
       在 System.Diagnostics.PerformanceCounter..ctor(String categoryName, String counterName, String instanceName, Boolean readOnly)
       在 System.Workflow.Runtime.PerformanceCounterManager.CreateCounters(String name)
       在 System.Workflow.Runtime.Hosting.DefaultWorkflowSchedulerService.OnStarted()
       在 System.Workflow.Runtime.Hosting.WorkflowRuntimeService.HandleStarted(Object source, WorkflowRuntimeEventArgs e)
       在 System.EventHandler`1.Invoke(Object sender, TEventArgs e)
       在 System.Workflow.Runtime.WorkflowRuntime.StartRuntime()
       在 System.Workflow.Runtime.WorkflowRuntime.InternalCreateWorkflow(CreationContext context, Guid instanceId)
       在 System.Workflow.Runtime.WorkflowRuntime.CreateWorkflow(Type workflowType)
       在 ls1.Program.Main(String[] args) 位置 E:\study2008\ls1\ls1\Program.cs:行号25

    是因为计数器问题所致,使用 vs2008 的调试功能,发现如下信息
    应用准备使用如下参数来创建一个性能计数器
    CategoryName Windows Workflow Foundation 3.0.0.0
    CounterName Workflows Pending
    instanceName _Global_
    readOnly  false

    发现不是自定义的计数器,要求参数 readOnly 必须为真,实际参数为假,所以系统抛出异常

    不过我也没有发现系统在哪里定义了这个计数器,所以也不能将其修改为自定义的计数器,怎么办呀?

    经查阅  msdn 后,发现可以关闭计数器,先关闭再说吧。

    为我的程序配置一个配置文件

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="CustomWorkflowRuntimeSettings" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection, System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </configSections>
      <CustomWorkflowRuntimeSettings Name="Workflow1" EnablePerformanceCounters ="false" >
        <!-- Define common parameters and declare services required for your workflow runtime -->
      </CustomWorkflowRuntimeSettings>

    </configuration>

    配置节 CustomWorkflowRuntimeSettings 说明关闭性能计数器

    在程序的创建工作流运行时的时侯,在构造函数中传递这个配置节的名字
    WorkflowRuntime workflowRuntime = new WorkflowRuntime("CustomWorkflowRuntimeSettings")
    编译时,系统提示需要增加对 System.Configuration 程序集的引用,加入引用,程序终于可以正常工作了。

    再次学习 MSDN, 发现使用 PerformanceCounterCategory.Delete(categoryName) 可以删除性能计数器的分类,执行如下代码删除名为 Windows Workflow Foundation 3.0.0.0 的性能计数器,系统正常。

     categoryName = "Windows Workflow Foundation 3.0.0.0";
     PerformanceCounterCategory.Delete(categoryName);

    分析:系统中创建的性能计数器分类 Windows Workflow Foundation 3.0.0.0 影响了工作运行时对计数器的使用。
    处理:删除此性能计数器分类即可。


  • 相关阅读:
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    vmware安装黑苹果教程
    微信支付v3发布到iis时的证书问题
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(连接篇SQL Server on linux)
    Linux下安装SQL Server 2016(安装篇SQL Server on linux)
    Linux下安装SQL Server 2016(准备篇SQL Server on linux)
    客服端与服务端APP支付宝支付接口联调的那些坑
    ASP.NET MVC]WebAPI应用支持HTTPS的经验总结
    .net平台下C#socket通信(中)
  • 原文地址:https://www.cnblogs.com/haogj/p/1110637.html
Copyright © 2011-2022 走看看