• 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 影响了工作运行时对计数器的使用。
    处理:删除此性能计数器分类即可。


  • 相关阅读:
    玩转MySQL之Linux下的简单操作(服务启动与关闭、启动与关闭、查看版本)
    玩转MySQL之Linux下修改默认编码
    机器学习算法及应用领域相关的中国大牛
    [转载]Python 包管理工具解惑
    Vim常用操作和快捷键技巧总结
    [转载]那些C++牛人的博客
    [转载]学习c/c++的好网站
    [转载]C++内存管理
    [转载]SQL数据库如何加快查询速度
    [转载]Python3.x和Python2.x的区别
  • 原文地址:https://www.cnblogs.com/haogj/p/1110637.html
Copyright © 2020-2023  润新知