Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MS Azure-C#WebJob项目依赖关系_C#_Azure Web App Service_Azure Webjobs_Webjob - Fatal编程技术网

MS Azure-C#WebJob项目依赖关系

MS Azure-C#WebJob项目依赖关系,c#,azure-web-app-service,azure-webjobs,webjob,C#,Azure Web App Service,Azure Webjobs,Webjob,我是Azure WJs的新手我在一个解决方案中有两个项目:实际的网站-项目2和WebJob-项目1。WJ的唯一任务是在计划时间内从项目2的公共类调用公开方法 创建WJ时,项目2-网站的类和方法被添加为解决方案参考到项目1-网络作业,以便于访问 我的问题是: namespace SecondProject { class Program { static void Main() { var client = new WebCl

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

创建WJ时,项目2-网站的类和方法被添加为解决方案参考项目1-网络作业,以便于访问

我的问题是:

namespace SecondProject
{
    class Program
    {
        static void Main()
        {
            var client = new WebClient();
            secondProjectMethod();
        }
    }
}
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.
        }
    }
}
构建WebJob时,它会在给定时间编译所有依赖项。当最终的.zip上传到Azure WebJob门户时,WebJob将以编译后的代码版本执行。这意味着,对项目2-网站的任何新更改都不会生效,直到WJ重新构建,更新了项目2-网站的依赖项并重新上传了.zip

是否有一种方法可以创建WJ(作为项目1),它可以从项目2中调用特定的公开方法,并且只要存在被调用的方法,就可以忽略项目2中的更改

例如:

网络作业代码(项目1):

namespace SecondProject
{
    class Program
    {
        static void Main()
        {
            var client = new WebClient();
            secondProjectMethod();
        }
    }
}
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.
        }
    }
}
网站代码(项目2):

namespace SecondProject
{
    class Program
    {
        static void Main()
        {
            var client = new WebClient();
            secondProjectMethod();
        }
    }
}
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.
        }
    }
}

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

如果需要两个项目独立,则不应使用项目引用

我的建议是将Project2共享类/方法发布为nuget包,并改用nuget,因此在发布新的nuget包并使用该web作业之前,对Project2的任何更改都不会影响您的web作业


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

由于您使用的是网站,您可以将Proj2中的方法作为API公开,并使Web作业调用API(而不是方法)。因此,即使您在Proj2中更改方法,只要公开的API调用更新的方法,WebJob将是独立的。
您可以看看这一点,为了创建基本API,我想到了至少两个选项:

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

这种方法的挑战是你的WJ需要找出网站dll的路径


选项2:既然它是一个网站,为什么不公开你想调用的函数作为REST API,那么你的WJ只需要做一个http调用

。好的,我明白了。所以当你说“问题似乎不是一个特定于Web作业的…”你的意思是这适用于任何项目间的依赖关系?如果是这样,那么我应该澄清,我所要做的就是通过Azure WebJob创建一个简单、可靠的“计划任务”。如果你在专用服务器上工作并且有“计划任务”,你就不会三思而后行了可用。对,我想,如果你的逻辑足够简单,也许你可以复制代码,让web作业拥有自己的代码版本…我的意思是,为了创建一个简单的计划作业,这似乎有很多困难需要跨越。难道没有简单的解决方案吗?…是的,这就是我从website是一个相当大的项目,并且一直在进行更改。根据作业的不同,您可以使用不同的东西,例如Azure Scheduler:或者甚至Azure Automation…由于您使用的是网站,您可以将Proj2中的方法公开为API,并使WebJob调用API(而不是方法)在您计划的时间间隔内。因此,即使您更改Proj2中的方法,只要公开的API调用更新的方法,WebJob将是独立的。是的,这似乎是最合理的解决方案。我希望有更多的API代码示例可用。Thx。感谢此链接,这正是我想要的…是的,这就是我的结束不过,我对在应用程序中使用HTTP调用并不感到兴奋,因为应用程序应该能够在内部调用这些方法。我不是说它不能,但需要的代码不止一行。@Milan如果您仍然想在内部调用该方法,可能会在一旁运行另一个webjob,并观察文件系统,如果文件更改通过dll f复制从您的网站项目到您的webjob项目(但无论您走哪条路,它都不会只是一行代码)我建议使用HTTP请求方法,因为它更简单,唯一的问题是REST API可能被外部用户发现。出于安全目的,您可能需要进行一些额外的检查,以确保它是从同一台机器调用的(如果这是一个问题)