MS Azure - C#WebJob项目依赖项

时间:2015-12-07 20:18:31

标签: c# azure-web-sites azure-webjobs webjob

我是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.
        }
    }
}

3 个答案:

答案 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作业的更改。