C#和Azure函数-函数是';我认不出
我编写了一个持久的函数,可以很好地处理传入的JSON数据,并将其放入队列进行处理。(我的表存储也在工作。)我的问题是处理队列触发器的Azure函数,其中一个函数无法识别。我的完整代码目前有200行,下面是一个过于简化的示例:C#和Azure函数-函数是';我认不出,c#,azure-functions,C#,Azure Functions,我编写了一个持久的函数,可以很好地处理传入的JSON数据,并将其放入队列进行处理。(我的表存储也在工作。)我的问题是处理队列触发器的Azure函数,其中一个函数无法识别。我的完整代码目前有200行,下面是一个过于简化的示例: namespace My.Namespace { public static class Test { [FunctionName("Main")] public static async void Run
namespace My.Namespace
{
public static class Test
{
[FunctionName("Main")]
public static async void Run([QueueTrigger("queue", Connection = "myinfo_STORAGE")] MyItem Item, ILogger log)
{
await DoSomethingElse("Information");
}
[FunctionName("DoSomething")]
public static async Task Run(string msg, ILogger log)
{
// code to do something
return;
}
}
}
当我尝试执行wait
时,它告诉我名称“DoSomething”在当前上下文中不存在。
我不明白-它在同一个类和命名空间中,这在我的持久功能编排项目中很好地工作。但是,我注意到,在我的持久功能编排项目中,持久功能有一个上下文,如下所示:
[OrchestrationTrigger]IDurableOrchestrationContext上下文,
然后我们使用上下文执行异步工作,如:
string res=await context.CallActivityAsync(“AddSomeData”,data)代码>
其中,AddSomeData
的定义如下:
[FunctionName("AddSomeData")]
public static async Task<Strin> Run(string data, ILogger log)
{
// do work
return "OK";
}
[FunctionName(“AddSomeData”)]
公共静态异步任务运行(字符串数据、ILogger日志)
{
//工作
返回“OK”;
}
QueueTrigger似乎没有与持久功能编排相同的上下文。我错过了什么
(我是一名VB.NET WinForms程序员,正在使用C#转换为Azure函数。)您不能通过Azure函数的FunctionName
属性直接调用函数。
在持久功能编排项目示例中,您不是直接调用函数,而是通过框架提供的机制调用函数:
string res=await context.CallActivityAsync(“AddSomeData”,data);
您是否尝试过以下方法:
string res=wait AddSomeData(数据);//没有这样的功能!
甚至:
string res = await AddSomeData(data, log); // still no such function!
除非实际的函数名恰好也是AddSomeData
(在您的例子中,它是Run
,因此您会得到错误),否则最终会出现相同的错误
因此,您可以使用函数的实际名称:
[FunctionName(“Main”)]
公共静态异步无效运行([QueueTrigger(“queue”,Connection=“myinfo\u STORAGE”)]MyItem项,ILogger日志)
{
等待运行(“信息”,日志);
}
请注意,您必须手动传递日志
——在持久功能编排项目示例中,日志
是通过上下文.CallActivityAsync
方法注入的。非常感谢,您是救命恩人。我肯定是被函数名属性甩了。