简体   繁体   中英

Azure Function v3 unable to bind blob to CloudBlockBlob

Azure function v3 runtime on VS19 (.Net SDK) with azure-functions-core-tools@3 6.14.4.

I'm using a Time trigger and executing read/write on a blob . But the binding is failing. I've followed all instructions on the docs and tried other solutions from StackOverflow for Azure functions v2 but I'm unable to fix the binding. I've even created the bindings through the portal's integration feature and then used that function.json but the same error is popping up.

I need to solve 2 problems:

  1. Fixing the binding error as mentioned below.

  2. [From a different azure function] After publishing of application to Azure, function.json is being overwritten by the server resulting in loss of bindings so retention of bindings in function.json is also required (though it is claimed in the docs that it is managed by serve and editing is not recommended).

Info from the 1st problem:

Here's what the run function looks like:

public static async Task Run([TimerTrigger("0 */10 * * * *")]TimerInfo myTimer, ILogger log, 
[Blob("container/blob.json", FileAccess.ReadWrite, Connection = "AzureWebJobsStorage")] CloudBlockBlob stateStore)

Function.json:

{
  "bindings": [
    {
      "name": "myTimer",
      "direction": "in",
      "type": "timerTrigger",
      "schedule": "0 */10 * * * *"
    },
    {
      "name": "stateStore",
      "direction": "inout",
      "type": "blob",
      "path": "container/blob.json",
      "connection": "AzureWebJobsStorage"
    }
  ]
}

host.json

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  },
  "logging": {
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    }
  }
}

Csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>v3</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Azure.Storage.Blobs" Version="12.4.2" />
    <PackageReference Include="Azure.Storage.Files.Shares" Version="12.2.1" />
    <PackageReference Include="Azure.Storage.Queues" Version="12.3.0" />
    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.14.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
    <PackageReference Include="Microsoft.Azure.KeyVault" Version="3.0.5" />
    <PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.4.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.1.1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.11" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.1.8" />
    <PackageReference Include="Microsoft.Extensions.Azure" Version="1.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.4" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
    <PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="16.153.0" />
    <PackageReference Include="WindowsAzure.Storage" Version="9.3.3" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <WCFMetadata Include="Connected Services" />
  </ItemGroup>
</Project>

Error on executing:

 1 functions loaded
[14-05-2020 10:17:11] Generating 1 job function(s)
[14-05-2020 10:17:11] Microsoft.Azure.WebJobs.Host: Error indexing method 'FunctionAppName'. 
Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'stateStore' to type CloudBlockBlob. 
Make sure the parameter Type is supported by the binding. 
If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) 
make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

Seems to me it's a problem mixing the multiple storage sdk availables with the latest runtime available.

WindowsAzure.Storage is legacy Azure.Storage.Blobs seems to be wrong too. Try removing them and also add Microsoft.Azure.Storage.Blob nuget package.

Azure.Storage.Blobs is the newest nuget package available for dealing with blobs, also Microsoft recommends using it.

I do not know your exact use case but I am using a BlobTrigger that I bind with

public void DoSomething([BlobTrigger("blog-storage/{filename}")] Stream blob, ...)
{
...
}

This is working with the new sdk version.

Also here you can find a documentation how to use the sdk.

Looks like there are problems with the packages again? I use Azure Functions v3 based on target framework netcoreapp3.1. For my function with Blob trigger I get the following error message:

The 'DataSync' function is in error: Microsoft.Azure.WebJobs.Host: Error indexing method 'DataSync'. Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer'.

The problem occurred after I updated packages Azure.AI.FormRecognizer (3.1.1) and Microsoft.Azure.WebJobs.Extensions.Storage (4.0.5) .

using Azure;
using Azure.AI.FormRecognizer;
using Azure.AI.FormRecognizer.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Table;

<PackageReference Include="Azure.AI.FormRecognizer" Version="3.1.1" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.18.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">

Is anyone aware of any issues with package dependencies?

I found a solutions for me: " Azure.AI.FormRecognizer " depends on .NETStandard, version = v2.0 " Microsoft.Azure.WebJobs.Extensions.Storage " depends on .NETStandard, version = v2.0

Before I had the following target framework for my function: .NET Core 3.1

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