如何在本地测试 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 当它根本不为空时?