1

我是 Azure WJ 的新手。我在一个解决方案中有 2 个项目:实际网站 - Project 2WebJob - Project 1。WJ 的唯一任务是在预定时间内从项目 2的公共类中调用一个公开的方法。

创建 WJ 时,将项目 2 - 网站的类和方法添加为对项目 1 - WebJob的解决方案引用,以使其可访问。

我遇到的问题是:

构建 WebJob 时,它会在给定时间编译所有依赖项。当最终的 .zip 上传到 Azure WebJob 门户时,Webjob 将使用已编译的代码版本执行。这意味着对项目 2 - 网站的任何新更改在使用更新的项目 2 - 网站依赖项和重新上传的 .zip 重新构建 WJ 之前不会生效。

有没有一种方法可以创建 WJ(作为项目 1),它会从项目 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.
        }
    }
}
4

3 回答 3

1

由于您使用的是网站,因此您可以将 Proj2 中的方法公开为 API,并让 WebJob 以您计划的时间间隔调用 API(而不是方法)。所以即使你在 Proj2 中改变了方法,只要暴露的 API 调用更新的方法,WebJob 就会是独立的。
您可以查看此链接,用于创建基本 API

于 2015-12-08T19:50:00.000 回答
1

我的脑海中至少有两个选择:

选项1:您的WJ项目不直接引用您的网站项目,而是在运行时使用反射加载网站dll。并使用反射来调用你想调用的函数(假设签名永远不会改变)

这种方法的挑战是您的 WJ 需要以某种方式找出网站 dll 的路径。

选项2:既然是网站,为什么不把你想调用的函数暴露为REST API,这样你的WJ只需要进行一个http调用

于 2015-12-11T19:36:03.027 回答
0

这个问题似乎不是特定于 Web 工作的问题,但无论如何......

如果您需要两个项目独立,那么您不应该使用项目引用。

我建议将 Project2 共享类/方法发布为 nuget 包并改用 nuget,因此对 Project2 的任何更改都不会影响您的 WebJob,直到您发布新的 nuget 包并使用您的 Web 作业。

或者,您可以为您的 dll 创建一个文件夹,例如“共享库”,并从该位置引用 Project2 而不是项目,以将您的 Web 作业的更改与您的项目引用隔离开来。

于 2015-12-07T20:43:55.237 回答