簡體   English   中英

Microsoft.Azure.Functions.Worker.Diagnostics.Exceptions.FunctionInputConverterException while processing a blob trigger in Azure Function .net 5

[英]Microsoft.Azure.Functions.Worker.Diagnostics.Exceptions.FunctionInputConverterException while processing a blob trigger in Azure Function .net 5

我有一個用 C#、.Net 5 編寫的 Az Function,配置有這樣的 blob 觸發器:

<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Storage" Version="4.0.4" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.0.1" OutputItemType="Analyzer" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.0.0" />

並且觸發器配置為期望 Stream

 [Function("function_name")]
    public static async Task Run([BlobTrigger("datatoingest/{name}", Connection = "STORAGE")] Stream myBlob, string name,
        ILogger logger)

如果我在本地部署它或在本地調試它,一旦它觸發並檢測到一個新 blob 說明它無法將其轉換為類型為“System.ReadOnlyMemory”的“System.IO.Stream”類型,我就會收到以下異常

Result: Failure Exception: Microsoft.Azure.Functions.Worker.Diagnostics.Exceptions.FunctionInputConverterException: Error converting 1 input parameters for Function 'nicos_nyctrips_ingestion': Cannot convert input parameter 'myBlob' to type 'System.IO.Stream' from type 'System .ReadOnlyMemory`1[[System.Byte, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]'。 在 Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInput(FunctionContext context) 在 D:\a\1\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:line 70 at Microsoft.Z3A580F1428203673 .Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context) 在 D:\a\1\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware 的第 37 行.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:第 13 行 Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest request, IFunctionApplication應用程序,IInvocationFeaturesFactory invocationFeaturesFactory,ObjectSerializer 序列化程序,IOutputBindingsInfoProvider outputBi ndingsInfoProvider) 在 D:\a\1\s\src\DotNetWorker.Grpc\GrpcWorker.cs:line 169 堆棧:在 Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInput(FunctionContext context) 在 D:\ a\1\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:第 70 行 Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context) 在 D:\a\1\s\ src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:第 37 行 Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\1\s\src\DotNetWorker.Core \OutputBindings\OutputBindingsMiddleware.cs:第 13 行,位於 Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest 請求,IFunctionsApplication 應用程序,IInvocationFeaturesFactory 調用 D:\a\1\s\src\DotNetWorker.Grpc\GrpcWorker.cs:line 169 中的 onFeaturesFactory、ObjectSerializer 序列化程序、IOutputBindingsInfoProvider outputBindingsInfoProvider)

根據 github 中的 PG 組對這里問題的回答

這是當今工作人員綁定的限制。 我們計划在即將發布的版本中解決這個問題,但目前我無法分享 ETA。

在同一行中,它提到了以下內容:

它可以將 stream 更改為 byte[]。 至少作為一種解決方法。

如果您只是嘗試從文本文件中解析 json,則可以將Stream輸入替換為string object。

還要注意 ILogger 使用FunctionContext的配置更改。

[Function("function_name")]
public static async Task Run([BlobTrigger("datatoingest/{filename}", Connection = "STORAGE")] string inputBlob, string filename, FunctionContext context)
{
    var logger = context.GetLogger("function_name");
    logger.LogInformation($"C# Blob trigger function Processed blob\n Name: {filename} \n Data: {inputBlob}");
    var request = JsonConvert.DeserializeObject<MyObject>(inputBlob);
    ....
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM