Questions tagged «azure-functions»

7
Azure Webjobs与Azure Functions:如何选择
我已经创建了一些使用触发器的Azure Webjob,并且我刚刚了解了Azure Functions。 据我了解,Azure功能似乎与Azure Webjobs功能重叠,并且我很难理解何时在Function和Webjob之间进行选择: 与Webjobs不同,Functions只能被触发,而不能被设计为运行连续过程(但是您可以编写代码来创建连续函数)。 您可以使用多种语言(C#,node.js,python ...)编写Webjobs和Functions,但是您可以从Azure门户编写函数,因此可以更轻松快捷地开发测试和部署Function。 Webjob在App Service Web应用程序,API应用程序或移动应用程序的上下文中作为后台进程运行,而“功能”使用经典/动态App Service计划运行。 关于扩展,“功能”似乎提供了更多的可能性,因为您可以使用动态应用程序服务计划,并且可以扩展单个功能,而对于Web作业,则必须扩展整个Web应用程序。 因此,可以肯定存在价格差异,如果您正在运行现有的Web应用程序,则可以使用它来运行Webjob,而无需支付任何额外费用,但是如果我没有现有的Web应用程序,并且必须编写代码以触发队列我应该使用webjob还是Function? 当您需要选择时,还有其他注意事项吗?



7
一次在本地运行计时器触发的Azure函数的最简单方法是什么?
我有一些使用计时器触发器按计划运行的C#Azure函数。我已经像这样设置了它们,其中%TimerSchedule%在应用程序设置中引用cron表达式: public static void Run([TimerTrigger("%TimerSchedule%")]TimerInfo myTimer, TraceWriter log) 在开发过程中,我经常想使用适用于Visual Studio的Azure函数工具+ Azure Functions核心工具在本地运行函数。但是当我按F5键在本地调试功能时(通常)它不会立即运行。相反,它将根据计时器计划开始等待下一次发生。因此,例如,如果我的cron表达式说每天晚上8点运行,那么我必须等到晚上8点才能使该功能真正在我的机器上运行。 所以我的问题是:使函数在本地运行一次的最简单,最佳方法是什么? 我尝试过或考虑过的事情: 使用更频繁的计时器计划以进行本地开发 可以,但并不完美–除非它非常频繁,否则您还需要稍等一下,如果它非常频繁,则该函数可能会运行多次。这就是我现在正在做的。 编写直接调用该函数的控制台应用程序或单元测试 Run()方法 这并不是100%直观的,因为您必须提供TimerInfo并提供TraceWriter参数,Run()而我发现令人惊讶的是很少有文档。 Microsoft的“ Azure函数”页面中的代码测试策略在该主题上不是很有帮助–它仅提及将计时器触发器作为测试其他对象的一种方式触发器类型的。 在理想情况下,我按下F5键,该功能将立即运行一次,就像开发一个“普通” .NET应用程序一样。

4
尝试从Visual Studio发布Azure函数时出错
当我尝试使用Visual Studio发布函数时,出现以下错误消息,您知道如何解决此问题吗? System.AggregateException:发生一个或多个错误。---> System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。---内部异常堆栈跟踪的结尾---在System.Threading.Tasks.Task.Task.Wait(Int32毫秒超时,CancellationToken cancelleToken)在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)在Microsoft.Publish.Framework。在System.Threading.Tasks.Task`1.InnerInvoke()在System.Threading.Tasks.Task.Execute()处的Model.DefaultPublishSteps。<> c__DisplayClass26_0.b__2()-从上次发生异常的位置开始的堆栈跟踪结束在System.Runtime.CompilerServices处抛出---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处。Microsoft.Publish.Framework.Model.DefaultPublishSteps.d__23.MoveNext()上的TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)-从上次引发异常的位置开始的堆栈跟踪-在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (任务任务)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在Microsoft.Publish.Framework.ViewModel.ProfileSelectorViewModel.d__213.MoveNext()--->(内部异常#0)System.Exception:发布具有遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。<- MoveNext()-从上一个引发异常的位置开始的堆栈跟踪--在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) .Publish.Framework.ViewModel.ProfileSelectorViewModel.d__213.MoveNext()--->(内部异常#0)System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。<- MoveNext()-从上一个引发异常的位置开始的堆栈跟踪--在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) .Publish.Framework.ViewModel.ProfileSelectorViewModel.d__213.MoveNext()--->(内部异常#0)System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。<- d__213.MoveNext()--->(内部异常#0)System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。<- d__213.MoveNext()--->(内部异常#0)System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。<- System.Exception:发布遇到错误。我们无法确定错误的原因。检查输出日志以获取更多详细信息。 ===================

2
配置服务时如何在具有依赖关系注入的Azure Function V3中注入或使用IConfiguration
通常,在.NET Core项目中,我会创建一个“ boostrap”类来配置我的服务以及DI注册命令。这通常是一种扩展方法,IServiceCollection可以在其中调用类似的方法,.AddCosmosDbService并且在包含该方法的静态类中,所有必需的东西都是“自包含的”。但是关键是该方法IConfiguration从Startup类中。 我过去曾在Azure Functions中使用过DI,但尚未遇到此特定要求。 我正在使用IConfiguration绑定到属性与我两个都匹配的具体类local.settings.json当在Azure中部署功能时,以及开发/生产应用程序设置。 CosmosDbClientSettings.cs /// <summary> /// Holds configuration settings from local.settings.json or application configuration /// </summary> public class CosmosDbClientSettings { public string CosmosDbDatabaseName { get; set; } public string CosmosDbCollectionName { get; set; } public string CosmosDbAccount { get; set; } public string CosmosDbKey { get; …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.