如何在本地测试 Azure Webjobs SDK 项目?

Posted

技术标签:

【中文标题】如何在本地测试 Azure Webjobs SDK 项目?【英文标题】:How do I test the Azure Webjobs SDK projects locally? 【发布时间】:2016-03-21 15:39:53 【问题描述】:

我希望能够在将 Azure WebJobs SDK 项目实际发布到 Azure 之前在本地对其进行测试。

如果我创建一个全新的 Azure Web Jobs 项目,我会得到一些如下所示的代码:

程序.cs:

// To learn more about Microsoft Azure WebJobs SDK, please see http://go.microsoft.com/fwlink/?LinkID=320976
class Program

    // Please set the following connection strings in app.config for this WebJob to run:
    // AzureWebJobsDashboard and AzureWebJobsStorage
    static void Main()
    
        var host = new JobHost();
        // The following code ensures that the WebJob will be running continuously
        host.RunAndBlock();
    

函数.cs:

public class Functions

    // This function will get triggered/executed when a new message is written 
    // on an Azure Queue called queue.
    public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)
    
        log.WriteLine(message);
    


我想测试一下QueueTrigger 函数是否正常工作,但我什至无法做到这一点,因为在host.RunAndBlock(); 上出现以下异常:

“System.InvalidOperationException”类型的未处理异常 发生在 mscorlib.dll 中

其他信息:Microsoft Azure WebJobs SDK 仪表板 连接字符串丢失或为空。微软 Azure 存储 帐号连接字符串可以通过以下方式设置:

    在 .config 文件的 connectionStrings 部分中设置名为“AzureWebJobsDashboard”的连接字符串,格式如下 , 或

    设置名为“AzureWebJobsDashboard”的环境变量,或者

    设置JobHostConfiguration的对应属性。

我运行了存储模拟器,并像这样设置 Azure AzureWebJobsDashboard 连接字符串:

<add name="AzureWebJobsDashboard" connectionString="UseDevelopmentStorage=true" />

但是,当我这样做时,我得到了一个不同的错误

“System.InvalidOperationException”类型的未处理异常 发生在 mscorlib.dll 中

附加信息:无法验证 Microsoft Azure WebJobs SDK 仪表板帐户。 Microsoft Azure 存储模拟器不是 支持,请使用托管在 微软 Azure。


有什么方法可以在本地测试我对 WebJobs SDK 的使用吗?

【问题讨论】:

【参考方案1】:

WebJobs 2.0 现在可以使用开发存储(我使用的是 v2.0.0-beta2)。

请注意,总体上的延迟,尤其是 Blob 触发器,目前远比您在生产中获得的要好得多。精心设计。

【讨论】:

【参考方案2】:

如果要在本地测试 WebJobs SDK,需要在 Azure 中设置存储帐户。您无法针对 Azure 模拟器对其进行测试。这就是那个错误告诉你的。

无法验证 Microsoft Azure WebJobs SDK 仪表板帐户。不支持 Microsoft Azure 存储模拟器,请使用托管在 Microsoft Azure 中的 Microsoft Azure 存储帐户。

所以要回答您的问题,您可以使用门户在 Azure 中创建一个存储帐户,然后在控制台应用程序的 app.config 中设置您的连接字符串。然后只需将消息放入队列并在本地运行控制台应用程序,它就会将其拾取(假设您显然正在尝试与队列交互)。

确保将[QueueTrigger("queue")]“队列”替换为您要轮询的队列的名称。

希望对你有帮助

【讨论】:

所以没有办法离线测试? 不行,你需要测试一个真实的存储帐户,不能使用模拟器。不过设置起来真的很容易。 我们有一个本地模拟器支持的跟踪项目,但目前不支持。在此处查看跟踪项目:github.com/Azure/azure-webjobs-sdk/issues/53。请注意,不需要 AzureWebJobsDashboard 连接字符串(仅当您想在仪表板中查看日志时)。需要 AzureWebJobsStorage 连接字符串。 你现在可以在本地测试了。该 github 问题已关闭,从 Emulator 4.3(4.4 是最新版本)开始,它改进了对队列的支持。 不...除非您不遗余力地安装某种随机的 nuget / 未知包...基本上这不是“按照设计”开箱即用的跨度>

以上是关于如何在本地测试 Azure Webjobs SDK 项目?的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Webjobs SDK 中设置 nextVisibleTime

什么是 Azure WebJobs SDK 3.0 版本的 host.Call()

Azure WebJobs SDK - 在啥情况下需要创建 JobHost 对象?

为啥我收到异常 Azure WebJobs SDK Dashboard connection string is missing or empty 当它根本不为空时?

Azure WebJob SDK 服务总线文档?

如何扩展 Azure Webjobs