预编译的 Azure 函数输出到 Blob 存储接收 500 内部服务器错误

Precompiled Azure Function Output to Blob Storage receiving 500 Internal Server Error

我的 C# 预编译 Azure 函数的最终输出是将 blob 存储作为 JSON 文件写入。我写错了 Blob 存储吗?我在函数末尾的大括号中设置了断点,看起来它退出了函数。大约 20 秒后,我得到异常:

Exception while executing function: ServiceBusTriggeredProcessAccepted. Microsoft.Azure.WebJobs.Host: Error while handling parameter outboundStringForBlobStorage after function returned:. Microsoft.WindowsAzure.Storage: The remote server returned an error: (500) Internal Server Error.

A​​zure 函数是服务总线触发的事件。处理失败后,服务总线排队项自动递增并重试,总共 10 次,然后将其移至死信队列。应该注意的是,对象的大小足够大,常规队列对它们来说太小了。

public class SomeObject
{
    //15 Properties all string and boolean
    public string Attachment{ get; set;}
    public string AnotherProperty{ get; set;}
    public bool IsConditionMet { get; set; }
    //Maybe these aren't needed now since it's blob storage but it's part of the object currently
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
}

[FunctionName("ServiceBusTriggeredProcessAccepted")]
public static void Run([ServiceBusTrigger("accepted")]
 SomeObject someObject,
 TraceWriter log,
 [Blob("accepted-attachments/{Attachment}", FileAccess.Read)] Byte[] blobContent
 , [Blob("accepted-sent/{rand-guid}.json")] out string outboundStringForBlobStorage 
 )
{
    someObject.PartitionKey = "email";
    someObject.RowKey = Guid.NewGuid().ToString();
    //Business Logic to execute here
    SomeService.SomeFunctionToSendBlobFile(someObject, blobContent)   
    outboundStringForBlobStorage  = JsonConvert.SerializeObject(someObject);
}

我正在使用: Azure Functions SDK NuGet 包 1.0.21
Microsoft.Azure.Webjobs2.2.0
WindowsAzure.ServiceBus5.0.0
DotNetFramework 4.6.1
Windows Azure 存储模拟器 5.8.0.0
运行时版本=1.0.11702.0

是否必须以某种方式清理序列化?过去我不必进行清理,但该对象中的数据已经更改,这就是问题开始出现的时候。我希望文件立即写入 blob 存储或 return 异常立即而不是在退出函数后 20 秒。

这个错误可能与序列化无关,让我们关注这一行。

Microsoft.WindowsAzure.Storage: The remote server returned an error: (500) Internal Server Error.

如果我没理解错的话,blob 输入和输出都与 Azure 存储模拟器相连。 v5.8 Emulator 有问题 failing blob writing. Install latest Emulator(现在是 v5.9)可以解决这个问题。

另请注意,Runtime Version=1.0.11702.0 表示 CLI 和模板已过时,要使用最新的,force VS to download on startup

  1. 确保 Azure Functions and Web Jobs Toolslatest,现在是 15.10.2046。在 VS 菜单 > 工具 > 扩展和更新 > 更新,更新列表中的扩展。

  2. 删除 %localappdata%\AzureFunctionsTools%userprofile%\.templateengine 文件夹。

  3. 重新打开 VS 创建一个新的 Function 项目,在创建对话框等待,参见 Making sure all templates are up to date...

    一段时间后,我们可以看到提示变化为

  4. 单击“刷新”立即使用最新模板。

不要忘记将 Microsoft.NET.Sdk.Functions 更新到最新版本(现在是 1.0.24)。而且我们不需要单独安装 Microsoft.Azure.Webjobs 内部被 Microsoft.NET.Sdk.Functions 引用。

函数启动后,我们现在可以看到运行时 Version=1.0.12205.0