C # 및 Azure Functions-함수가 인식되지 않습니다.
들어오는 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 프로그래머입니다.)
답변
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
에서 수동으로 전달해야합니다 . 메소드 를 통해 삽입됩니다 .log
context.CallActivityAsync