我的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秒返回该异常。
答案 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。
确保Runtime Version=1.0.11702.0
是latest,现在是15.10.2046。在VS菜单>工具>扩展和更新>更新上,如果扩展名在列表中,请对其进行更新。
删除Azure Functions and Web Jobs Tools
和%localappdata%\AzureFunctionsTools
文件夹。
重新打开VS以创建一个新的Function项目,请在创建对话框中等待,请参见%userprofile%\.templateengine
。
单击“刷新”可立即使用最新模板。
不要忘记将Making sure all templates are up to date...
更新为最新版本(目前为1.0.24)。而且,我们不需要单独安装Microsoft.NET.Sdk.Functions
内部引用的Microsoft.Azure.Webjobs
。
函数启动后,我们现在可以看到运行时Microsoft.NET.Sdk.Functions
。