1

I'm learning about Azure Functions and am trying to post an object using Azure's Table binding. Here is the code for my Azure function:

[FunctionName("Table_CreateTodo")]
        public static async Task<IActionResult> Post(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "todo")]
                HttpRequest req,
            [Table("todos", Connection ="AzureWebJobsStorage")]
                IAsyncCollector<TodoTableEntity> todoTable,
            ILogger log)
        {

            try
            {
                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                log.LogInformation($"Request Body: \n {requestBody}");
                var todoCreate = JsonConvert.DeserializeObject<TodoCreateModel>(requestBody);
                var todo = new Todo() { TaskDescription = todoCreate.TaskDescription };
                await todoTable.AddAsync(todo.ToTableEntity());
                return new OkObjectResult(todo);

            }
            catch (Exception ex)
            {
                return new BadRequestObjectResult(ex.ToString());
            }

        }

When I submit a POST request to the route via POSTMAN the .NET console spits out the following exception:


[2022-08-19T06:09:00.618Z] Request Body: 
[2022-08-19T06:09:00.618Z]  {"TaskDescription": "AZURREEE"}
[2022-08-19T06:09:07.492Z] Executed 'Table_CreateTodo' (Failed, Id=334b1470-eda9-47b7-91a2-4766ba7f98b2, Duration=7035ms)
[2022-08-19T06:09:07.493Z] System.Private.CoreLib: Exception while executing function: Table_CreateTodo. Microsoft.Azure.WebJobs.Host: Error while handling parameter todoTable after function returned:. Azure.Core: Retry failed after 4 tries. Retry settings can be adjusted in ClientOptions.Retry. (Connection refused (127.0.0.1:10002)) (Connection refused (127.0.0.1:10002)) (Connection refused (127.0.0.1:10002)) (Connection refused (127.0.0.1:10002)). Azure.Core: Connection refused (127.0.0.1:10002). System.Net.Http: Connection refused (127.0.0.1:10002). System.Net.Sockets: Connection refused.

I can confirm that there are no processes running on port 10002 so I'm not sure what the issue is. I can confirm that all Azure functions that don't use the Table bindings are working.

Here is my local.settings.json file:

{
    "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "AzureWebJobsSecretStorageType": "files"
  }
}

From my understanding the value of AzureWebJobsStorage will use the local table storage so I don't need to provide the connection string to an actual db.

Here is my .csproj file:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Tables" Version="1.0.0" />
  </ItemGroup>
  <ItemGroup>
    <None Remove="Models\" />
    <None Remove="Microsoft.Azure.WebJobs.Extensions.Storage" />
    <None Remove="Microsoft.Azure.WebJobs.Extensions.Tables" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Models\" />
  </ItemGroup>
</Project>

Any help would be really appreciated! I tried running the example from Azure's table binding example here, but I'm getting the same exception as above:

System.Private.CoreLib: Exception while executing function: Table_CreateTodo. Microsoft.Azure.WebJobs.Host: Error while handling parameter todoTable after function returned:. Azure.Core: Retry failed after 4 tries. Retry settings can be adjusted in ClientOptions.Retry. (Connection refused (127.0.0.1:10002)) (Connection refused (127.0.0.1:10002)) (Connection refused (127.0.0.1:10002)) (Connection refused (127.0.0.1:10002)). Azure.Core: Connection refused (127.0.0.1:10002). System.Net.Http: Connection refused (127.0.0.1:10002). System.Net.Sockets: Connection refused.

1 Answer 1

2

Your connection string is using local storage and you havent started docker or npm.

You can start it

docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
    mcr.microsoft.com/azure-storage/azurite

or npm

npm install -g azurite
azurite --silent --location c:\azurite --debug c:\azurite\debug.log
Sign up to request clarification or add additional context in comments.

2 Comments

@Frosty619 what error ?:)
Sorry, I submitted a comment when I shouldn't have. I ran the docker container and the app is working. Thank you so much! You've saved me a ton of time (:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.