我是Azure WJs的新手。 我在一个解决方案中有2个项目:实际的网站 - 项目2 和 WebJob - 项目1 。 WJ唯一的任务是在预定时间内从公共类项目2 调用公开的方法。
当WJ被创建时,课程& 项目2 - 网站的方法作为解决方案参考添加到项目1 - WebJob ,以使其可访问。
我遇到的问题是:
构建WebJob时,它会在给定时间编译所有依赖项。当最终的.zip上传到Azure WebJob门户时,webjob将使用已编译的代码版本执行。这意味着对项目2 - 网站的任何新更改都不会生效,直到使用更新的项目2 - 网站依赖项重新构建WJ并且.zip重新生成上传。
有没有办法创建WJ(作为项目1),它可以从项目2中调用特定的公开方法,并且只要被调用的方法是项目2,就可以忽略项目2 中的更改本?
示例:
WebJob代码(项目1):
namespace SecondProject
{
class Program
{
static void Main()
{
var client = new WebClient();
secondProjectMethod();
}
}
}
网站代码(项目2):
namespace firstProject
{
public class someClass
{
public void secondProjectMethod()
{
// I want to make any code changes I want inside this
// method anytime and the WbJob should not care
// about these changes as long as this method name exist.
// Because all it should care about is that it should
// call this method name.
}
}
}
答案 0 :(得分:1)
由于您使用的是网站,因此可以将方法从Proj2公开为API,并使WebJob按照计划的时间间隔调用API(而不是方法)。因此,即使您更改Proj2中的方法,只要公开的API调用更新的方法,WebJob将是独立的。
您可以查看此link,以创建基本API < / p>
答案 1 :(得分:1)
我脑子里至少有两种选择:
选项1:您的WJ项目不直接引用您的网站项目,而是在运行时使用反射加载网站dll。并使用反射来调用您想要调用的函数(假设签名永远不会改变)
这种方法面临的挑战是你的WJ需要找出网站dll的路径。
选项2:因为它是一个网站,为什么不公开你想要作为REST API调用的函数,所以你的WJ只需要进行一次http调用
答案 2 :(得分:0)
这个问题似乎不是一个特定于Web的工作,但无论如何......
如果您需要这两个项目是独立的,那么您不应该使用项目引用。
我建议将Project2共享类/方法发布为nuget包并使用nuget代替,因此对Project2的任何更改都不会影响您的WebJob,直到您发布新的nuget包并使用它为止网络工作。
或者,您可以为您的dll创建一个文件夹,例如&#34;共享库&#34;并从该位置引用Project2而不是项目,以从Project引用中隔离对Web作业的更改。