gpt4 book ai didi

c# - 如何在没有作业程序集本地副本的情况下在 Quartz.net 中安排远程作业?

转载 作者:太空宇宙 更新时间:2023-11-03 22:11:23 24 4
gpt4 key购买 nike

我正在尝试为 Quartz.net 中的调度创建一个远程作业。当我在本地拥有包含该作业的程序集副本时,我可以执行类似这样的操作

    JobDetail job = new JobDetail("remotelyAddedJob", "default", typeof(DummyJob.DummyJob));

这要求我在服务器和我从中创建计划的计算机上都有一个包含类 DummyJob 的程序集的副本。

我想做的是能够在没有客户端副本的情况下创建计划,方法是按照存储在 quartz_jobs.xml 文件中的方式发送作业类型信息

  <job-type>Quartz.Job.NoOpJob, Quartz</job-type>

在没有本地副本的情况下,我无法弄清楚如何发送类类型信息。有没有人对此有好的解决方案?

最佳答案

这个问题真的很困扰我。我知道我可以即时生成类,所以我研究了方法。

第一步:创建这个类

using System;
using Quartz;
using System.Reflection;
using System.Reflection.Emit;

namespace TestQuartzTaskCreator {
public class FakeJob {
public static Type Create(string assemblyName, string typeName){
AssemblyName aName = new AssemblyName(assemblyName);
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(
aName,
AssemblyBuilderAccess.RunAndSave);

ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");

TypeBuilder tb = mb.DefineType(typeName, TypeAttributes.Public);

tb.AddInterfaceImplementation(typeof(IJob));

MethodBuilder meth = tb.DefineMethod(
"Execute",
MethodAttributes.Public | MethodAttributes.Virtual,
typeof(void),
new Type[] { typeof(JobExecutionContext) });

meth.DefineParameter(1,
ParameterAttributes.In,
"context");

ILGenerator methIL = meth.GetILGenerator();
methIL.Emit(OpCodes.Ldarg_0);

Type t = null;
try {
// Finish the type.
t = tb.CreateType();
}
catch (Exception ex) {
System.Console.WriteLine(ex.ToString());
}

// ab.Save(aName.Name + ".dll");

return t;
}
}
}

第 2 步:由此改变

JobDetail job = new JobDetail("remotelyAddedJob", "default", typeof(TestType));

对此

JobDetail job = new JobDetail("remotelyAddedJob", "default", FakeJob.Create("TestAss", "TestType"));

第 3 步:像以前一样运行(但没有在客户端中引用作业程序集的副本)

-- 编辑--虽然这完成了我最初想要的,但它并没有解决从客户端环境使用 Quartz.Net 时的所有问题。检索作业需要程序集可用。

我目前的方法是创建一个 Web 服务界面,该界面将驻留在与服务相同的服务器上并呈现一个更加断开连接的界面。

关于c# - 如何在没有作业程序集本地副本的情况下在 Quartz.net 中安排远程作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6496899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com