WindowsAzure.Storage vs. Azure.Data.Tables binding in a Http Trigger function

adriana_malea 141 Reputation points
2021-08-25T12:28:22.527+00:00

Hello,

Can you please explain me what is the correct way to use Storage libs in the context of deprecated / non-deprecated?

  1. If I am using

Microsoft.Azure.WebJobs.Extensions.Storage Version="4.0.4"
"Microsoft.NET.Sdk.Functions Version="3.0.13"

and the following code:

using Microsoft.WindowsAzure.Storage.Table;
[FunctionName("CalloutFunction")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req,
            [DurableClientAttribute] IDurableOrchestrationClient client,
            [Table("ZPGCallouts")] Microsoft.WindowsAzure.Storage.Table.CloudTable cloudTable)

When starting the function, it throws:

Microsoft.Azure.WebJobs.Host: Error indexing method 'SubscriptionProvisioningCalloutFunction'. Microsoft.Azure.WebJobs.Extensions.Storage: Can't bind Table to type 'Microsoft.WindowsAzure.Storage.Table.CloudTable'

I don't have a CosmosDB in my project, so I am not confident that using Microsoft.Azure.Cosmos.Table instead of WindowsAzure.Storage.Table is the solution.

  1. I have tried with Azure.Data.Tables
    I have the following model entity that implements Azure.Data.Tables.ITableEntity, instead of inheriting from Microsoft.WindowsAzure.Storage.Table.TableEntity public class CalloutEntity : ITableEntity
    {
    public CalloutEntity() {}
        public CalloutEntity(CalloutData data)
        {
            if (data == null) return;
            Id = data.Id;
            PartitionKey = "TestCallout";
            RowKey = Guid.NewGuid().ToString("N");
            Timestamp = DateTimeOffset.UtcNow;
        }
    
        public Guid Id { get; set; }
        public string PartitionKey { get; set; }
        public string RowKey { get; set; }
        public DateTimeOffset? Timestamp { get; set; }
        public ETag ETag { get; set; }
    }
    
    }

and I also have a trigger function, that used to bind a Microsoft.WindowsAzure.Storage.Table.CloudTable (see code above at 1.)

Which class from which lib should I bind now? I can't use CosmosDB.CloudTable, because I am not using the ComosDB service.
I need a class that knows like CloudTable to use the connection string from AzureWebJobsStorage.

Thanks for the clarifications!

Azure Table Storage
Azure Table Storage
An Azure service that stores structured NoSQL data in the cloud.
171 questions
Azure Functions
Azure Functions
An Azure service that provides an event-driven serverless compute platform.
5,117 questions
0 comments No comments
{count} vote

Accepted answer
  1. Pramod Valavala 20,636 Reputation points Microsoft Employee
    2021-08-25T17:35:28.39+00:00

    @adriana_malea The Microsoft.Azure.Cosmos.Table SDK implements the Table API which both Azure Storage Tables and Azure CosmosDB Table API support. The SDK adapts based on the service connecting to. Therefore the Microsoft.Azure.WebJobs.Extensions.Storage SDK references Microsoft.Azure.Cosmos.Table instead.


0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.