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

时间:2019-01-15 16:19:16

标签: c# azure azure-functions azure-servicebus-queues azure-blob-storage

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

  

执行功能时异常:ServiceBusTriggeredProcessAccepted。 Microsoft.Azure.WebJobs.Host:函数返回后处理参数outboundStringForBlobStorage时出错: Microsoft.WindowsAzure.Storage:远程服务器返回错误:(500)内部服务器错误。

Azure功能是服务总线触发的事件。处理失败后,服务总线将项目排队并自动重试和重试总计10次,然后再将其移至死信队列。应该注意的是,这些对象的大小足够大,以至于常规Queue对它们来说太小了。

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.Webjobs 2.2.0
WindowsAzure.ServiceBus 5.0.0
DotNetFramework 4.6.1
Windows Azure存储模拟器5.8.0.0
运行时版本= 1.0.11702.0

是否必须以某种方式清理序列化?过去我没有必要进行消毒,但是该对象中的数据已更改,也就是问题开始发生的时候。我希望该文件立即被写入Blob存储,或者立即退出该函数,而不是在退出函数后20秒返回该异常。

1 个答案:

答案 0 :(得分:1)

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

  

Microsoft.WindowsAzure.Storage:远程服务器返回错误:(500)内部服务器错误。

如果我理解正确,则Blob输入和输出均与Azure Storage Emulator连接。 v5.8模拟器failing blob writing中存在某些错误。安装latest Emulator(目前为v5.9)可以解决此问题。

还要注意,<a href="#my-paragraph"> The Website </a>意味着CLI和模板已过时,以消耗最新的force VS to download on startup

  1. 确保Runtime Version=1.0.11702.0latest,现在是15.10.2046。在VS菜单>工具>扩展和更新>更新上,如果扩展名在列表中,请对其进行更新。

  2. 删除Azure Functions and Web Jobs Tools%localappdata%\AzureFunctionsTools文件夹。

  3. 重新打开VS以创建一个新的Function项目,请在创建对话框中等待,请参见%userprofile%\.templateengine

    enter image description here 一段时间后,我们可以看到笔尖的变化为

    enter image description here

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

不要忘记将Making sure all templates are up to date...更新为最新版本(目前为1.0.24)。而且,我们不需要单独安装Microsoft.NET.Sdk.Functions内部引用的Microsoft.Azure.Webjobs

函数启动后,我们现在可以看到运行时Microsoft.NET.Sdk.Functions