Azure 尽管捕获了异常,但仍发生ScriptHost错误

Azure 尽管捕获了异常,但仍发生ScriptHost错误,azure,azure-functions,Azure,Azure Functions,我有一个简单的函数,它从队列中获取消息并将其保存到存储表中。我希望在某些情况下,具有相同数据的表实体可能已经存在。因此,我添加了一个异常处理来跳过这种情况,并将队列消息标记为已处理。尽管现在已经处理了异常,但scripthost会通知我一个错误,并且消息仍然在队列中 我想这是因为我使用的是主机和代码之间边缘的表绑定。我说得对吗?我应该在代码中使用表客户机而不是绑定吗?有不同的方法吗 生成此情况的示例代码: [FunctionName("MyFunction")] public s

我有一个简单的函数,它从队列中获取消息并将其保存到存储表中。我希望在某些情况下,具有相同数据的表实体可能已经存在。因此,我添加了一个异常处理来跳过这种情况,并将队列消息标记为已处理。尽管现在已经处理了异常,但scripthost会通知我一个错误,并且消息仍然在队列中

我想这是因为我使用的是主机和代码之间边缘的表绑定。我说得对吗?我应该在代码中使用表客户机而不是绑定吗?有不同的方法吗

生成此情况的示例代码:

    [FunctionName("MyFunction")]
    public static async Task Run([QueueTrigger("myqueue", Connection = "Conn")]string msg, [Table("mytable", Connection = "Conn")] IAsyncCollector<DataEntity> dataEntity, TraceWriter log)
    {
        try
        {
            await dataEntity.AddAsync(new DataEntity()
            {
                PartitionKey = "1",
                RowKey = "1",
                Data = msg
            });
            await dataEntity.FlushAsync();
        }
        catch (StorageException e)
        {
           // when it is an exception that informs "entity already exists" skip it
        } 
    }
[FunctionName(“MyFunction”)]
公共静态异步任务运行([QueueTrigger(“myqueue”,Connection=“Conn”)]string消息,[Table(“mytable”,Connection=“Conn”)]IAsyncCollector数据实体,TraceWriter日志)
{
尝试
{
等待dataEntity.AddAsync(新dataEntity()
{
PartitionKey=“1”,
RowKey=“1”,
数据=消息
});
等待dataEntity.FlushAsync();
}
捕获(存储异常)
{
//当异常通知“实体已存在”时,跳过它
} 
}

队列触发器函数失败时,Azure函数将对给定队列消息重试该函数最多五次,包括第一次尝试

如果所有五次尝试都失败,函数运行库将向名为
-poison
的队列添加一条消息

您可以编写一个函数来处理来自的消息,方法是记录消息或发送需要手动注意的通知

该文件包含控制队列触发器行为的设置:

{
    "queues": {
      "maxPollingInterval": 2000,
      "visibilityTimeout" : "00:00:30",
      "batchSize": 16,
      "maxDequeueCount": 1,
      "newBatchThreshold": 8
    }
}
注意maxDequeueCount默认值为5。在将消息移动到毒药队列之前尝试处理消息的次数。根据需要,您可以设置
“maxDequeueCount”:1


此外,这些设置在主机范围内,适用于所有功能。您目前无法控制每个函数的这些参数。

谢谢您的回答。不幸的是,它不能解决我的问题。我知道队列触发器的行为(关于其重试策略、毒药队列等),我认为这不是重点。问题是我捕捉到了一个异常,尽管如此,我还是得到了scripthost错误。