C#和Azure函数-函数是';我认不出

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

我编写了一个持久的函数,可以很好地处理传入的JSON数据,并将其放入队列进行处理。(我的表存储也在工作。)我的问题是处理队列触发器的Azure函数,其中一个函数无法识别。我的完整代码目前有200行,下面是一个过于简化的示例:

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
方法注入的。

非常感谢,您是救命恩人。我肯定是被函数名属性甩了。