我想创建一个Azure Webjob来满足批处理需求(特别是它会不断迭代SQL Azure数据库表,获取某些记录,执行一些操作然后更新表).我不需要Azure存储.
在这种情况下,我仍然可以将我的方法暴露给Azure函数调用仪表板吗?或者是Azure存储属性是唯一暴露的方法?
作为一个例子,我可能有一个功能:
ShowTotalNumRecordsProcessedToday()
Run Code Online (Sandbox Code Playgroud)
我希望公开并能够从仪表板调用.我已经创建了一些公共测试功能,但它们没有显示在仪表板中.
我可以在我的场景中这样做吗?
我想从我的WebJob调用一个REST调用,我想知道是否有可能以编程方式http://<something>.azurewebsites.net从我的WebJob中检索Host Url(),而不是对URL进行硬编码.
我有一个webjob应用程序来处理运行良好的ServiceBus队列,使用以下方法:
public static void ProcessQueueMessage([ServiceBusTrigger("myQueueName")] BrokeredMessage message, TextWriter log)
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够在不重新编译的情况下更改队列名称,例如根据配置appsetting,可以完成吗?
我正在开发一个使用TimerTrigger的触发式webjob.
在webjob停止之前,我需要处理一些对象,但我不知道如何触发"webjob stop".
有了一个NoAutomaticTrigger函数,我知道我可以使用WebJobsShutdownWatcher类来处理webjob何时停止但是触发了一个工作我需要一些帮助......
我看了Azure WebJobs SDK 1.1.0-alpha1的可扩展触发器和绑定器.
WebJobsShutdownWatcher在webjob停止之前创建一个使用该类来触发操作的自定义触发器(StopTrigger)是一个好主意吗?
有没有办法挂钩到WebJobs函数执行,所以我们可以为每个函数设置一个范围?像这样的东西:
kernel.Bind<MyDbContext>().ToSelf().InWebJobFunctionScope();
我想使用InScope()来自Ninject,但我不知道在哪里可以找到类似于静态的东西HttpContext.Current但是对于当前正在运行的WebJob.
我有一个Azure WebJob控制台应用程序,无法识别TimerTrigger我已设置.
我有Program.csVisual Studio生成的默认值:
class Program
{
static void Main()
{
var config = new JobHostConfiguration();
if (config.IsDevelopment)
{
config.UseDevelopmentSettings();
}
var host = new JobHost();
host.RunAndBlock();
}
}
Run Code Online (Sandbox Code Playgroud)
我将我的新功能添加到Functions.cs:
public static void MyFunction([TimerTrigger("0 */2 * * * *",
RunOnStartup = true)]
TimerInfo timerInfo,
TextWriter log)
{
log.WriteLine("MyFunction started!");
}
Run Code Online (Sandbox Code Playgroud)
(我安装了WebJobs.ExtensionsNuGet包,所以我的代码编译得很好.)
我还添加了这一行:
config.UseTimers();
Run Code Online (Sandbox Code Playgroud)
对于这个答案中Main提到的功能,但由于某种原因,我的新功能仍然没有被触发.
当我启动应用程序时,我看到了这个输出:
Found the following functions:
MyNamespace.Functions.ProcessQueueMessage
Job host started
Run Code Online (Sandbox Code Playgroud)
所以它没有看到我的新功能.
为什么会发生这种情况,我该如何解决?
根据如何在Azure Functions中使用SendGrid文档,我们需要为SendGrid API密钥创建一个条目。该文档包含一个名为“应用程序设置”的面板的屏幕截图,该面板似乎在任何地方都不存在(也许该文档未与UI保持同步...)。
但是,我已经能够在其他3个合适的地方创建键(同样,UI似乎很差,我不得不在这里猜测)。
请有人对此提供建议吗?
我们有一个azure web作业,在functions.cs文件中有两个方法.这两个作业都是从Azure Service Bus中的不同主题触发的.
由于它在运行时使用反射来确定由命中主题的消息运行/触发的函数,因此代码中没有对这些方法的引用.
public static async Task DoWork([ServiceBusTrigger("topic-one", "%environmentVar%")] BrokeredMessage brokeredMessage, TextWriter log) {}
public static async Task DoOtherWork([ServiceBusTrigger("topic-two", "%environmentVar2%")] BrokeredMessage brokeredMessage, TextWriter log) {}
Run Code Online (Sandbox Code Playgroud)
基于运行时设置的变量,我需要让这个Web作业同时运行这两种方法,或者只运行其中一种方法(它不会更改作业正在运行的一个,但是在作业启动时读入它) .我不能简单地将方法的内部包装在if()基于变量的内容中,因为它会读取并销毁消息.
是否可以使用JobHostConfiguration(an IServiceProvider)来实现这一点,因为它是在运行时构建的.那是JobHostConfiguration.IJobActivator可以用的吗?
我试图围绕我们应该如何构建Azure功能.
我喜欢构建响应事件的无服务器,紧凑,单功能应用程序的想法.
以下是我遇到的问题:
此时,我看到的唯一选择是将代码"复制并粘贴"到新的Azure Functions项目中,并在没有任何DI的情况下使用它.
这似乎违背了"最佳做法".那么除了创建单片代码或等到Azure Functions支持.NET Core和DI之外,还有什么解决方案.
我以为我可以使用面向.NET Framework的常规Azure Functions项目中的.NET Standard类库.毕竟,.NET Standard的想法是"标准化"事物.我在SO上开了几个帖子.我正在提供链接,以便您可以看到我遇到的问题:
在WebJob中使用.NET Core 2.0库定向.NET Framework 4.7
使用.NET Core和Ninject的WebJobs中没有无参数构造函数错误
PS我以前的帖子指的是WebJobs.这是B计划的方法,因为在支持.NET Core和DI等事情时,WebJobs似乎比Azure Functions领先半步.最后,我想构建一些可以使用我在.NET Standard 2中构建的类库的Azure函数.
此外,我之前的帖子提到我的类库以.NET Core 2.0为目标.从那时起,我将它们转换为.NET Standard 2,它实际上并没有太多用处.我这样做是为了让我真正符合.NET Standard 2.
首先,我查看了具有相同错误消息的其他SO帖子,但似乎没有一个可以解决我的问题。我尝试了许多排列和选项。我的函数构建良好,但无法在CLI中运行,我收到以下神秘错误。MSFT文档似乎也没有答案。
找不到工作职能。尝试公开您的工作类别和方法。如果您正在使用绑定扩展(例如ServiceBus,Timer等),请确保已在启动代码(例如config.UseServiceBus(),config.UseTimers()等)中调用了扩展的注册方法。 )。
我正在尝试运行计时器作业,然后将消息集合写入事件中心。我想念什么?我已经为此战斗了好几个小时。
功能:
[FunctionName("CreateData")]
public static async Task Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer,
[EventHub("murraytest", Connection = "evingest")] IAsyncCollector<string> myeventhub,
TraceWriter log)
{
await myeventhub.AddAsync("data1");
await myeventhub.AddAsync("data2");
await myeventhub.AddAsync("data3");
log.Info($"COMPLETED: {DateTime.Now}");
}
Run Code Online (Sandbox Code Playgroud)
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"Eventhub": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "",
"evingest": "Endpoint=sb://example.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=LtcqBLT5VWjg0dGMdIvxCcEGs8902010Y6y14iGg="
}
}
Run Code Online (Sandbox Code Playgroud)
配套
function.json-缺少任何eventhub绑定!
{
"generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
"configurationSource": "attributes",
"bindings": [
{
"type": "timerTrigger",
"schedule": "0 */5 * * * *",
"useMonitor": true,
"runOnStartup": false,
"name": "myTimer"
}
],
"disabled": …Run Code Online (Sandbox Code Playgroud) c# azure-webjobs azure-webjobssdk azure-functions azure-functions-runtime