简体   繁体   中英

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

I have an Az Function written in C#, .Net 5, configured with a blob trigger like this:

<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" />

and the trigger configured expecting a Stream

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

If I either deploy it or debug it locally I get the following exception as soon as it triggers and detects a new blob stating it can't convert it to type 'System.IO.Stream' from type 'System.ReadOnlyMemory

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]]'. at Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInput(FunctionContext context) in D:\a\1\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:line 70 at Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context) in D:\a\1\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:line 37 at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 at Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest request, IFunctionsApplication application, IInvocationFeaturesFactory invocationFeaturesFactory, ObjectSerializer serializer, IOutputBindingsInfoProvider outputBi ndingsInfoProvider) in D:\a\1\s\src\DotNetWorker.Grpc\GrpcWorker.cs:line 169 Stack: at Microsoft.Azure.Functions.Worker.Context.Features.DefaultModelBindingFeature.BindFunctionInput(FunctionContext context) in D:\a\1\s\src\DotNetWorker.Core\Context\Features\DefaultModelBindingFeature.cs:line 70 at Microsoft.Azure.Functions.Worker.Invocation.DefaultFunctionExecutor.ExecuteAsync(FunctionContext context) in D:\a\1\s\src\DotNetWorker.Core\Invocation\DefaultFunctionExecutor.cs:line 37 at Microsoft.Azure.Functions.Worker.OutputBindings.OutputBindingsMiddleware.Invoke(FunctionContext context, FunctionExecutionDelegate next) in D:\a\1\s\src\DotNetWorker.Core\OutputBindings\OutputBindingsMiddleware.cs:line 13 at Microsoft.Azure.Functions.Worker.GrpcWorker.InvocationRequestHandlerAsync(InvocationRequest request, IFunctionsApplication application, IInvocationFeaturesFactory invocati onFeaturesFactory, ObjectSerializer serializer, IOutputBindingsInfoProvider outputBindingsInfoProvider) in D:\a\1\s\src\DotNetWorker.Grpc\GrpcWorker.cs:line 169

Based on the answer from the PG group in github to this issue here

That's a limitation of the worker bindings today. We have plans to address that in upcoming releases, but don't have an ETA I can share at this point.

On the same lines it is mentioned the following:

It works changing stream to byte[]. At least as a workaround.

If you are simply attempting to parse json from a text file, you can replace the Stream input with a string object.

Also note the configuration change which is using FunctionContext for ILogger.

[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);
    ....
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM