C# 如何在本地测试Azure队列触发器函数?

C# 如何在本地测试Azure队列触发器函数?,c#,azure,azure-functions,C#,Azure,Azure Functions,我创造了一个新的世界。下面是我创建云队列的代码。然后添加从我的CarComponent返回的id [FunctionName("CarDiscovery")] public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log) { log.Info($"C# Timer trigger function executed at: {DateTime.Now}"); v

我创造了一个新的世界。下面是我创建云队列的代码。然后添加从我的CarComponent返回的id

[FunctionName("CarDiscovery")]
public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");

    var connectionString = "UseDevelopmentStorage=true";
    // Parse the connection string and return a reference to the storage account.
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);

    CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
    // Retrieve a reference to a container.
    CloudQueue queue = queueClient.GetQueueReference("discovery-queue");

    // Create the queue if it doesn't already exist
    queue.CreateIfNotExists();

    CarComponent cars = new CarComponent();
    var carList = cars.GetActiveCars();

    foreach (var car in carList)
    {
        byte[] toAdd = BitConverter.GetBytes(car.Id);
        CloudQueueMessage message = new CloudQueueMessage(toAdd);  // <-- Put the ID of each metro in the message
        queue.AddMessage(message);
    }
}
[FunctionName(“CarDiscovery”)]
公共静态无效运行([TimerTrigger(“0*/5****”)TimerInfo myTimer,TraceWriter日志)
{
log.Info($“C#计时器触发器函数在:{DateTime.Now}执行”);
var connectionString=“UseDevelopmentStorage=true”;
//解析连接字符串并返回对存储帐户的引用。
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(connectionString);
CloudQueueClient=storageAccount.CreateCloudQueueClient();
//检索对容器的引用。
CloudQueue queue=queueClient.GetQueueReference(“发现队列”);
//如果队列不存在,请创建该队列
CreateIfNotExists();
CarComponent cars=新的CarComponent();
var carList=cars.GetActiveCars();
foreach(carList中的var car)
{
字节[]toAdd=位转换器.GetBytes(car.Id);
CloudQueueMessage=new CloudQueueMessage(toAdd);//1)要查看队列中的消息,可以使用Azure存储资源管理器:

2) 要使您的函数连接到队列,您需要存储帐户的密钥。您可以通过以下方法获得答案:

获得密钥后,在
local.settings.json
中添加一个新值:

{
  "IsEncrypted": false,   
  "Values": {
    "AzureWebJobsStorage": "<connection string>", 
    "AzureWebJobsDashboard": "<connection string>",
    "MyStorageAccountConnection": "DefaultEndpointsProtocol=https;AccountName=[XXXX_YOUR_ACCOUNT_NAME_XXXX];AccountKey=[XXXX_YOUR_KEY_XXXX];EndpointSuffix=core.windows.net"
  }
}
{
“IsEncrypted”:错误,
“价值观”:{
“AzureWebJobsStorage”:“,
“AzureWebJobsDashboard”:“,
“MyStorageAccountConnection”:“DefaultEndpointsProtocol=https;AccountName=[XXXX\U YOUR\U ACCOUNT\U NAME\U XXXX];AccountKey=[XXXX\U YOUR\U KEY\U XXXX];EndpointSuffix=core.windows.net”
}
}
所以要回答第二个问题:您可以指定MyStorageAccountConnection作为连接的名称。

在队列中可以找到消息的位置 根据:

存储仿真器使用本地Microsoft SQL Server实例和本地文件系统来模拟Azure存储服务。默认情况下,存储仿真器使用Microsoft SQL Server 2012 Express LocalDB中的数据库。您可以选择将存储仿真器配置为访问SQL Server的本地实例而不是LocalDB实例。

因此,您需要:

  • 安装和配置Azure存储模拟器
  • 启动它
  • 运行时,通过url访问队列服务:
    http://127.0.0.1:10001/ 对于Azure函数

    创建新功能项目后,将文件添加到具有类似内容的解决方案根目录中:

    {
      "IsEncrypted": false,
      "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
        "YourQueueConnectionString": "http://127.0.0.1:10001/MyAccount"
      }
    }
    
    添加属性。您的Azure函数入口点应类似于:

    [FunctionName("MyQueueFunction")]
    public static async Task Run([QueueTrigger("MyQueue", Connection = "YourQueueConnectionString")] string message, TraceWriter log)
    

    这里有一些有用的东西供您使用-它们是本地测试而不是使用我的存储帐户密钥和名称的一种方法吗?Azure确实有一个存储模拟器,因此您不需要在Azure中针对存储帐户工作,Azure功能如何无法使用它:“Azure功能工具在本地开发时不支持使用Azure存储模拟器”(@“Azure SME”该评论是否仍然正确?我在页面(或其他任何地方)上看不到引用的文本。