Visual studio Azure功能应用程序没有';发布后似乎不会触发

Visual studio Azure功能应用程序没有';发布后似乎不会触发,visual-studio,continuous-integration,c#-3.0,azure-functions,azure-blob-storage,Visual Studio,Continuous Integration,C# 3.0,Azure Functions,Azure Blob Storage,在Azure中,我开发了一个功能(应用程序服务),当一个新的csv文件放置在特定的存储帐户中时会触发该功能。该功能是在Azure中开发的,每次上传新的csv文件时,功能都不会出现问题。然而,考虑到CI/CD,我决定将我的开发过程从Azure转移到Visual Studio(2017年) 代码在本地运行时没有任何问题,但只要我将代码发布到Azure(通过VSTS),挑战就开始了。当新的csv文件上载到存储帐户时,似乎触发器没有被激活。顺便说一句,该函数确实触发了,但我无法确定原因,也无法重新创建它

在Azure中,我开发了一个功能(应用程序服务),当一个新的csv文件放置在特定的存储帐户中时会触发该功能。该功能是在Azure中开发的,每次上传新的csv文件时,功能都不会出现问题。然而,考虑到CI/CD,我决定将我的开发过程从Azure转移到Visual Studio(2017年)

代码在本地运行时没有任何问题,但只要我将代码发布到Azure(通过VSTS),挑战就开始了。当新的csv文件上载到存储帐户时,似乎触发器没有被激活。顺便说一句,该函数确实触发了,但我无法确定原因,也无法重新创建它

为了使问题更容易理解,我将代码简化为Blobtrigger和一些日志记录。此外,我删除了VST中的构建,并通过Visual Studio 2017直接发布了我的构建,但结果类似。代码在本地运行良好,但在发布后,函数不会被触发(或者很偶然地触发)

我使用的代码是:

using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;

namespace TestApp
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("csv-files-in/{name}.csv", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, TraceWriter log)
        {
            log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
        }
    }
}

“AzureWebJobsStorage”是指定义Blobstorage端点的local.settings.json。此设置自动部署到Azure,但即使我手动设置此连接,该功能也不会被触发。在我自己多次尝试解决这个问题后,我决定向这个网站上的聪明人寻求建议。这是一个错误还是我遗漏了什么?在将此发布到Azure之后,我可以做些什么来确保我的函数(可靠地)被触发?提前感谢。

您可能遇到了以下问题:

如果您的功能应用程序在消费计划中,如果功能应用程序处于空闲状态,则处理新BLOB可能会延迟10分钟。为了避免这种冷启动延迟,您可以切换到启用“始终开启”的应用程序服务计划,或者使用不同的触发器类型

取自

触发该函数的另一种解决方案是使用

编辑:
另外,请注意BlobTrigger是轮询触发器。它没有发现任何变化的时间越长,两次投票之间的时间就越长。这会给你带来几分钟的延迟

如果正在监视的blob容器包含10000多个blob,则函数运行时将扫描日志文件以查看新的或更改的blob。此过程可能导致延迟。在创建blob后的几分钟或更长时间内,函数可能不会被触发


更多信息,请访问

我在Azure Service Bus触发的函数中遇到此问题,并且可以通过查看存储资源管理器中的函数日志来找到问题。在我的例子中,是一个名称不正确的设置导致了问题。

你好,rick,即使有延迟,函数似乎也不会触发。我已经在使用常开设置(我已经尝试了一些方法),但这并不能解决我的问题。blob容器是轮询触发器的fac对我来说是新的,以后要记住这一点是件好事,但目前它似乎并没有影响我的触发器。出于研究目的,我正在使用一个空的blob存储,这样我就可以方便地监控何时/是否有新的上传触发了我的函数。您是如何部署到函数的?您的connectionstring
AzureWebJobsStorage
以及您的所有设置都已在函数的appsettings刀片中设置。appI已以两种不同的方式部署到函数中。第一次部署是通过VSTS中的构建和发布,第二次部署是通过VisualStudio中的发布。my local.settings文件中的所有设置(如
AzureWebJobsStorage
)也在我的应用程序设置中设置。我还尝试将'
AzureWebJobsStorage
作为连接字符串而不是应用程序设置,但没有成功,您是否有多个此函数的实例针对同一存储帐户运行?我确实有多个由同一存储帐户触发的函数是,但是为了测试部署的功能,我禁用了所有这些。我想这应该可以防止它们影响我部署的功能。是的,功能主机获得了租约,所以可能是这个问题。。。我想你必须添加更多细节,或者在github上打开一个问题