C # 및 Azure Functions-함수가 인식되지 않습니다.

Aug 20 2020

들어오는 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;
        }       
    }
}   

내가하려고 할 때 await, 그것은 The name 'DoSomething' does not exist in the current context.내가 이해하지 못한다고 말하고 있습니다 . 동일한 클래스와 네임 스페이스에 있고 이것은 내 내구성있는 함수 오케스트레이션 프로젝트에서 잘 작동합니다. 그러나 내 지속성 함수 오케스트레이션 프로젝트에서 지속성 함수에는 다음과 같은 컨텍스트가 있습니다.

[OrchestrationTrigger] IDurableOrchestrationContext context,

그런 다음 컨텍스트를 사용하여 다음과 같은 비동기 작업을 수행합니다.

string res = await context.CallActivityAsync<string>("AddSomeData", data);

어디 AddSomeData같이 정의된다 :

[FunctionName("AddSomeData")]
public static async Task<Strin> Run(string data, ILogger log)
{
    // do work
    return "OK";
}

내구성있는 함수 오케스트레이션과 같은 방식으로 QueueTrigger에 대한 컨텍스트가없는 것 같습니다. 내가 무엇을 놓치고 있습니까?

(저는 C #을 사용하여 Azure 함수로 전환하는 VB.NET WinForms 프로그래머입니다.)

답변

2 CoolBots Aug 20 2020 at 04:21

Azure Functions FunctionName특성 으로 함수를 직접 호출 할 수 없습니다 .

당신에 내구성 기능의 오케스트레이션 프로젝트 예를 들어, 당신은하지만 프레임 워크에서 제공하는 메커니즘을 통해 직접 함수를 호출하지 않는 :

string res = await context.CallActivityAsync<string>("AddSomeData", data);

다음을 시도 했습니까?

string res = await AddSomeData(data); // no such function!

또는:

string res = await AddSomeData(data, log); // still no such function!

실제 함수 이름이 발생 하지 않는 한 동일한 정확한 오류가 발생합니다 AddSomeData(귀하의 경우 Run에는 오류가 발생합니다).

따라서 대신 함수의 실제 이름을 사용할 수 있습니다.

[FunctionName("Main")]
public static async void Run([QueueTrigger("queue", Connection = "myinfo_STORAGE")] MyItem Item, ILogger log)
{
   await Run("Information", log);
}

내구성 기능 오케스트레이션 프로젝트 예제 log에서 수동으로 전달해야합니다 . 메소드 를 통해 삽입됩니다 .logcontext.CallActivityAsync