Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
C# 如何制作连续的WebJob?_C#_Azure_Azure Webjobs - Fatal编程技术网

C# 如何制作连续的WebJob?

C# 如何制作连续的WebJob?,c#,azure,azure-webjobs,C#,Azure,Azure Webjobs,我创建了一个Azure WebJob,如下面的脚本所示,它将一个项目从Azure存储队列中出列,然后将其存储到Azure表中。进程在1或2秒内完成运行,但在一分钟内只运行几次(有时在大约10分钟内停止)。总的来说,它不起作用 我错过了什么?也许我混合了触发作业和连续作业,但很难找到合适的样本 class Program { static void Main(string[] args) { Console.WriteLine("started at {0}", D

我创建了一个Azure WebJob,如下面的脚本所示,它将一个项目从Azure存储队列中出列,然后将其存储到Azure表中。进程在1或2秒内完成运行,但在一分钟内只运行几次(有时在大约10分钟内停止)。总的来说,它不起作用

我错过了什么?也许我混合了触发作业和连续作业,但很难找到合适的样本

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("started at {0}", DateTime.Now.ToString("s"));

        // Continuous job should have infinite loop.
        while(true){
            var host = new JobHost();
            host.RunAndBlock();
        }
    }

    public static void ProcessQueueMessage([QueueInput("blogqueue")] string json)
    {
        var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings    ["StorageConnectionString"].ConnectionString);
        var tableClient = storageAccount.CreateCloudTableClient();

        // Store it to Azure Table Storage
        // omitted...

        Console.WriteLine("Received JSON: {0}", json);
    }
几点意见:

  • 您不需要
    while(true)
    语句
    RunAndBlock
    内部已经有一个while循环,它将在那里阻塞
  • 您不需要手动检索表。您可以绑定到示例中所示的表
  • 您可以绑定到存储帐户,不需要从配置文件中手动读取连接字符串并创建实例
  • 以下是绑定到存储帐户的示例:

    public static void ProcessQueueMessage([QueueInput("blogqueue")] string json, CloudStorageAccount) 
    {
        ...
    }
    

    这是一个猜测,但从您的代码来看,存储连接字符串似乎存储在配置文件的
    StorageConnectionString
    中。
    JobHost
    希望(1)运行时的连接字符串和数据存储在
    AzureJobsData
    AzureJobsRuntime
    (如上所述)中,或者(2)将连接字符串作为参数传递给
    JobHost
    构造函数。我认为这就是崩溃的原因。

    要使连续的WebJob正常工作,您需要在网站的“配置”选项卡中启用“始终打开”


    “始终打开”功能仅适用于基本/标准网站计划,如果未启用该功能,您的WebJob可能会在一段时间后关闭。

    只需在ProjectName/Properties/WebJob-publish-settings.json中更改发布设置即可

    "runMode": "OnDemand"  =>  "runMode": "Continuous"
    

    谢谢,我有一个问题,绑定方法(ProcessQueueMessage)是否在触发模式下执行?我的意思是,“队列项目到达时持续触发”或“Azure自己的WebJob调度程序周期持续检查新项目”?My Azure Storage Explorer显示出队列计数越来越高,但未从队列中删除,尽管该过程已成功。由于Main方法和binded方法没有concreate关系,因此很难猜测流程。如果在“RunAndBlock”场景中使用上述作业,则作业必须是连续的。这意味着,该进程将一直运行,并且它将定期(每隔几秒钟)轮询指定的Azure queueI已将WebJob更改为WorkerRole,因为WebJob的执行频率似乎较低(可能约1~2秒?)。我希望它有很高的频率(大约0~10ms)。WebJob可以以0~10ms的执行频率运行吗?WebJob和WebJobs SDK是两种不同的东西,你不需要一种来让另一种工作,因此如果你编写作业(使用.NET、javascript或其他语言)来频繁执行,它就会运行。如果它被部署到kubernetes呢?