作业处理程序的加载方式

了解 Job Processor 在启动时如何加载作业处理程序。

Job Processor 会加载 Autodesk 和第三方作业处理程序。

  1. 从“扩展”文件夹加载所有第三方作业处理程序
  2. 读取作业处理程序配置信息。
  3. 加载 Autodesk 的作业处理程序。
  4. 将作业类型与作业处理程序关联起来并检查是否每个作业处理程序均已启用。

第三方作业处理程序扩展

每个第三方扩展应位于扩展目录中自己的文件夹中:

%allusersprofile%\Autodesk\Vault[年份]\Extensions\

因此,例如某个作业处理程序扩展名为“JobHandlerSample”,则可能位于目录 %allusersprofile%\Autodesk\Vault [年份\Extensions\JobHandlerSample 中。

对于扩展目录内的每个文件夹,Job Processor 会检查是否存在配置文件。配置文件是可随意命名的纯文本文件,但末尾必须使用扩展名 .vcet.config。如果配置文件不存在,将无法加载扩展。以下是样例配置文件 JobHandlerSample.vcet.config 的内容:

<configuration>
    <connectivity.ExtensionSettings2>
         <assembly>JobHandlerSample</assembly>
         <extensionType>JobProcessor</extensionType>
    </connectivity.ExtensionSettings2>
</configuration>

assembly 元素指定了扩展 dll 的名称。因此,在上面的样例中,扩展 dll 名为 JobHandlerSample.dll。JobProcessor 的扩展类型表明这是 Job Processor 的扩展(此目录中还有其他扩展类型:WebService 和 VaultClient)。

现已加载该扩展程序集(在本样例中为 JobHandlerSample.dll)。加载时完成以下检查:

  1. 检查程序集 dll 的参考,以确保它没有链接到任何 Vault dll(名称以“Connectivity”开头的那些 dll)。如果扩展程序集链接到这些 dll 之一(直接或间接),将无法加载。
  2. 检查程序集是否有实现 IJobHandler 接口的单个导出类型。在 JobHandlerSample 示例中,我们可以使用程序集项目内的以下 C# 类实现 IJobHandler 接口:
    namespace JobHandlerSample
    {
        public class JobHandlerSample : IJobHandler
         {
             public bool CanProcess(string strJobType)
              {
                 return strJobType.Equals("jobhandlersample");
              }
    
              public JobOutcome Execute(IJobProcessorServices context, IJob job)
               {
                  return JobOutcome.Success;
               }
          }
    }         

    该部件中必须恰有一个实现 IJobHandler 的公共类型。如果不是这样,将无法加载扩展。此类型的实例已实例化。

  3. 检查程序集是否具备某些所需的程序集属性。具体指:
    1. ApiVersion:Autodesk.Connectivity.Extensibility.Framework.ApiVersionAttribute 类型的属性,指定编写的此扩展所对应的 API 版本。如果该版本与 Vault API 的当前版本不匹配,将无法加载该扩展。
    2. Company、Description、ProductName:命名空间 System.Reflection 中 AssemblyCompanyAttribute、AssemblyDescriptionAttribute、AssemblyProductAttribute 类型的属性是必需的,不能为空字符串。如果这些属性不存在或为空,将无法加载扩展。
    3. ExtensionId:Autodesk.Connectivity.Extensibility.Framework.ExtensionIdAttribute 类型的属性,指定唯一的 Id 作为字符串(以 GUID 形式)。如果该属性不存在或为空,将无法加载扩展。

作业处理程序配置

作业处理程序配置文件是一个 XML 文件,其中包含 Job Processor 的配置信息。它与 JobProcessor.exe 位于相同目录下(通常是 C:\Program Files\Autodesk\Vault Professional [年份]\Explorer),名为 JobProcessor.exe.config。作业处理程序配置的相关部分位于 configuration\connectivityExplorer\jobHandlers 下。在此 XML 部分中,每个 jobHandler 元素代表一个作业处理程序。jobHandler XML 元素形式如下:

<jobHandler class="jobType" handler="NameOfTypeImplementingIJobHandler"/>

位置:

  1. class 代表作业类型。作业添加到作业服务器队列后,将指定作业类型,这个唯一的字符串将用于确定哪一个作业处理程序将处理该作业。
  2. handler 代表程序集内实现 IJobHandler 的类型名称。可使用多种方法指定。您需要指定传递给 System.Type.GetType(string)(请参阅 http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx)时将返回程序集内实现 IJobHandler 的对象类型。

因此,我们的样例扩展的有效 jobHandler 元素将为:

<jobHandler class="jobhandlersample" handler="JobHandlerSample.JobHandlerSample, JobHandlerSample"/>

在 JobProcessor.exe.config 文件中,您会发现每个 Autodesk 的内置作业处理程序已经有对应的 jobHandler 条目。如果已存在对应的 jobHandler 条目,则只会加载内置作业处理程序。内置作业处理程序 dll 位于与 JobProcessor.exe 相同的目录下。

检查作业处理程序是否已启用

上面的配置信息用于将作业类型与特定作业处理程序关联起来。关联后,将询问每个作业处理程序是否可以处理特定作业类型。作业处理程序会通过实现接口方法 IJobHandler.CanProcess 回答此问题。此时,作业处理程序应检查是否具备所需的所有条件来处理其类型的作业(例如,某些 DWF 创建作业处理程序会检查是否安装了 Inventor)。 

当您查看 Job Processor 当前处理哪些作业类型时(通过使用菜单“管理”->“作业类型...”),列出的每个条目意味着该作业类型的作业处理程序已成功加载。如果条目已被选中,则表示相应的作业处理程序处于启用状态(即从 IJobHandler.CanProcess 实现返回了“True”)。若要让 Job Processor 重新询问作业处理程序是否“可以处理”,用户需要退出 Job Processor 并重新启动。

加载并询问所有作业处理程序后,Job Processor 即可开始提取队列中的作业并处理它们。

样例作业处理程序

Vault SDK 含有示例作业处理程序 JobProcessorApiSamples。有关详细信息,请单击此处