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


  • 相关阅读:
    服务器消息机制实现记录
    转载SQL经典代码按某一字段分组取最大(小)值所在行的数据
    记录js获取当前URL
    (原创)xilinx IP建立向导创建的目录和文件都是做什么的?由错误ERROR:HDLCompiler:Instantiating <xx> from unknown module <xx>引发的思考
    [转]NTFS3G的安装和配置
    (原创)Notepad++怎么实现双视图/双窗口?
    (原创)Quartus硬件工程路径改变,nios工程该怎么办?
    (原)verilog中的reg类型变量,一定会综合出触发器吗?
    (Windows)使用纯净版本的系统碟安装系统后没有网卡驱动怎么办?
    [转]NIOS_II的Boot过程分析
  • 原文地址:https://www.cnblogs.com/haogj/p/1110637.html
Copyright © 2011-2022 走看看