Azure Function方法名称重要吗?

cvxl0en2  于 2023-06-24  发布在  其他
关注(0)|答案(3)|浏览(138)

我目前正在开发一些C# Azure函数。我使用的命名约定是Process[ThingIWantToProcess](),如下所示:

public static void ProcessRequest([TimerTrigger("00:00:10", RunOnStartup = true, UseMonitor = false)] TimerInfo timer, ILogger logger)
{
     // Do function things
}

几天前,所有的功能(目前,其中6个)停止运行时,他们被部署,但没有代码已被更改,我知道或可以看到。
控制台,本地和Kudu控制台,说“找到以下功能:”并显示所有预期的功能;但是,这些函数永远不会运行。
我尝试了各种方法,包括重新部署,重新启动Azure Web Job,以及更改方法的内容,但仍然没有启动。然后,我改变了函数的名称,突然它开始工作了!
因此,它现在不是ProcessRequest,而是ProcessRequest1,并且函数成功触发。我用了几种不同的方法更改了名称,所有方法都有效,但当我更改回ProcessRequest时,它再次停止工作。
我在文档或互联网搜索中找不到任何解释这种行为的东西,我担心在未来的维护中会再次发生这种情况。

有没有其他人经历过这种情况,如果有,你能给我一些解释吗?

jdg4fx2g

jdg4fx2g1#

嘿!!这是由于TimerTrigger使用锁行为来确保只有一个函数示例在扩展示例中运行。因此,如果您使用同一个存储帐户进行多个Web作业,您将面临此问题。
要解决此问题,我建议您只需为您的作业创建单独的存储帐户,它应该可以正常工作!!!
欲了解更多信息,请访问:https://github.com/Azure/azure-webjobs-sdk/issues/614

30byixjq

30byixjq2#

不,没关系。
FunctionName属性将方法标记为函数入口点。名称在项目中必须是唯一的,以字母开头,并且只能包含字母、数字、_和-,长度最多为127个字符。项目模板通常会创建一个名为Run的方法,但方法名称可以是任何有效的C#方法名称
https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#methods-recognized-as-functions

guz6ccqo

guz6ccqo3#

似乎你有点困惑是否有任何Azure函数命名约定。好吧,让我们把话说清楚。

Azure函数类似于C#方法:

Azure函数就像C#方法一样。所以在这里遵循C#方法命名约定也是很好的。
但是Azure函数建议的模式如下:<name>-func
示例:azureexample-func

public static class AzureFunctionExampleClass
    {
        [FunctionName("azureexample-func")]
        
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            //Read Request Body
            var content = await new StreamReader(req.Body).ReadToEndAsync();

            //Extract Request Body and Parse To Class
            Users objUsers = JsonConvert.DeserializeObject<Users>(content);

            //As we have to return IAction Type So converting to IAction Class Using OkObjectResult We Even Can Use OkResult
            var result = new OkObjectResult(objUsers);
            return (IActionResult)result;
        }
    }

**注意:**您甚至可以使用PascalCase,如AzureExampleFunc。因为没有这样严格的约束。
**大小写:**不区分大小写
**函数有效字符:**字母数字和连字符
**函数长度:**1-60
需要跳过的关键词:

每种语言都有自己定义的关键字,而命名函数时最好省略这个名字。所以编译器永远不会对此感到困惑。

使函数可读:

虽然函数不限制任何强制性的命名约定,但建议使用可读的名称,以便易于理解它的作用。
如果您仍然对Azure命名约定有任何疑问,可以检查this document

相关问题