我目前正在开发一些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
时,它再次停止工作。
我在文档或互联网搜索中找不到任何解释这种行为的东西,我担心在未来的维护中会再次发生这种情况。
有没有其他人经历过这种情况,如果有,你能给我一些解释吗?
3条答案
按热度按时间jdg4fx2g1#
嘿!!这是由于TimerTrigger使用锁行为来确保只有一个函数示例在扩展示例中运行。因此,如果您使用同一个存储帐户进行多个Web作业,您将面临此问题。
要解决此问题,我建议您只需为您的作业创建单独的存储帐户,它应该可以正常工作!!!
欲了解更多信息,请访问:https://github.com/Azure/azure-webjobs-sdk/issues/614
30byixjq2#
不,没关系。
FunctionName属性将方法标记为函数入口点。名称在项目中必须是唯一的,以字母开头,并且只能包含字母、数字、_和-,长度最多为127个字符。项目模板通常会创建一个名为Run的方法,但方法名称可以是任何有效的C#方法名称。
https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#methods-recognized-as-functions
guz6ccqo3#
似乎你有点困惑是否有任何Azure函数命名约定。好吧,让我们把话说清楚。
Azure函数类似于C#方法:
Azure函数就像C#方法一样。所以在这里遵循C#方法命名约定也是很好的。
但是Azure函数建议的模式如下:
<name>-func
示例:
azureexample-func
**注意:**您甚至可以使用
PascalCase
,如AzureExampleFunc
。因为没有这样严格的约束。**大小写:**不区分大小写
**函数有效字符:**字母数字和连字符
**函数长度:**1-60
需要跳过的关键词:
每种语言都有自己定义的关键字,而命名函数时最好省略这个名字。所以编译器永远不会对此感到困惑。
使函数可读:
虽然函数不限制任何强制性的命名约定,但建议使用可读的名称,以便易于理解它的作用。
如果您仍然对Azure命名约定有任何疑问,可以检查this document。