.NET 5 다중 출력 바인딩의 Azure Functions
3914 단어 azureserverless
새로운 격리 모델에서 간단한 http 함수에 대한 출력 바인딩은 이전 클래스 라이브러리 모델과 유사하며 메서드의 반환 값은 http 응답입니다. 추가 출력 바인딩이 필요한 경우 상황이 많이 변경되었습니다! 더 이상 함수의 인수(예: IAsyncCollector)에 바인딩 특성을 지정할 수 없습니다. 새 모델에서 함수에 대해 여러 출력 바인딩을 사용하려는 경우 함수 메서드의 반환 값을 통해서도 수행됩니다.
모든 출력 바인딩 반환
그러나 이것은 어떻게 작동합니까? 아이디어는 매우 간단합니다. 모든 출력 값에 대한 속성이 있는 클래스를 만들고 출력 바인딩 특성으로 장식합니다. 다음은 공식Samples에서 빌린 예입니다.
public static class MultiOutput
{
[Function("MultiOutput")]
public static MyOutputType Run([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequestData req,
FunctionContext context)
{
var response = req.CreateResponse(HttpStatusCode.OK);
response.WriteString("Success!");
string myQueueOutput = "some output";
return new MyOutputType()
{
Name = myQueueOutput,
HttpResponse = response
};
}
}
public class MyOutputType
{
[QueueOutput("myQueue")]
public string Name { get; set; }
public HttpResponseData HttpResponse { get; set; }
}
source
시끄러운
보시다시피 MultiOutput 함수는 MyOutputType 유형을 반환하고 Name 속성은 QueueOutputAttribute로 데코레이트됩니다. 이것이 작동하고 나에게 분명했지만 이 설정이 약간 시끄럽다는 느낌을 지울 수 없었습니다. 그 때문에 더 깨끗한 솔루션을 만들 수 있는지 확인하기 위해 C#의 새로운 기능 중 일부를 가지고 놀기 시작했습니다. 첫 번째 생각은 튜플을 반환 값으로 사용하는 것이었지만 이것은 현재 실행 가능한 솔루션이 아니며 속성이 있는 결과 정의도 이상하게 만들 것입니다.
다음 생각은 RECORDS였습니다. 예, 불변성이라는 성배에 도달하는 데 도움이 되는 새로운 레코드 유형입니다. 기존의 좋은 클래스 대신 레코드를 만드는 것은 멋진 장점이 많지만 이 문제가 사라지지는 않습니다. 레코드 정의를 더 작게 만들기 위해 위치 레코드를 사용할 수 있습니다. 즉, 한 줄의 코드에서 속성, 지원 필드 및 모든 값을 예상하는 생성자로 변경 불가능한 클래스를 정의합니다. 대상 유형이 지정된 새 표현식과 함께 트릭을 수행할 것입니다. 맞습니까? 내 다음 문제가 나타납니다. 속성에 속성을 넣는 방법은 무엇입니까? 몇 가지 Bingle 마법을 사용한 후 답변이 있는 language spec에서 속성 이름 앞에 property:를 붙일 수 있으며 속성에 속성을 생성합니다.
최종 결과
내 개념 증명은 다음과 같습니다.
public class MultiOutputFunction
{
public record MultiOutputResult(HttpResponseData Response, [property: BlobOutput("multioutput/example.txt")] string BlobContent);
[Function(nameof(MultiOutput))]
public async Task<MultiOutputResult> MultiOutput([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "MultiOutput")] HttpRequestData req)
{
var response = req.CreateResponse();
response.WriteString("Hello world");
return new(response, DateTime.UtcNow.ToString());
}
}
source
Please be aware this is just little old me playing around with some code, it could be that the Azure Functions Team is thinking about different directions and might not recommend this approach.
oscarvantol.nl
Reference
이 문제에 관하여(.NET 5 다중 출력 바인딩의 Azure Functions), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/oscarvantol/multiple-output-bindings-in-azure-functions-isolated-process-model-46ag텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)