如何解决Azure耐用函数我应如何处理TaskFailedExceptionDeserializationException
如果从Azure ActivityFunction引发异常,并且无法将其序列化为json,则将引发TaskFailedExceptionDeserializationException,其中包含原始异常作为InnerException。
应如何处理? 可能有各种各样我无法控制的异常无法序列化。
解决方法
如here所述:
尝试注入IErrorSerializerSettingsFactory(在v2.1中引入) 带有自定义JsonConverter对象可以解决此问题
非常简单的示例(我不确定如何正确实现自定义jsonConverter,您必须自己弄清楚)
启动类(使用dependency injection):
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using System.Collections.Generic;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IErrorSerializerSettingsFactory,CustomErrorSerializer>();
}
}
public class CustomErrorSerializer : IErrorSerializerSettingsFactory
{
public JsonSerializerSettings CreateJsonSerializerSettings()
{
return new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,Converters = new List<JsonConverter>
{
new CustomConverter()
}
};
}
}
}
CustomConverter类:
public class CustomConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer,object value,JsonSerializer serializer)
{
if (!value.GetType().IsSerializable)
return;
JToken t = JToken.FromObject(value);
t.WriteTo(writer);
}
public override object ReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer)
{
throw new NotImplementedException("Unnecessary because CanRead is false. The type will skip the converter.");
}
public override bool CanRead
{
get { return false; }
}
public override bool CanConvert(Type objectType)
{
return true;
}
}
我的不可序列化异常:
public class HttpResponseException : Exception
{
public HttpStatusCode StatusCode { get; }
public HttpResponseException(HttpStatusCode statusCode)
{
StatusCode = statusCode;
}
}
当我将其从活动函数中抛出时,我没有收到错误消息,说“无法从TaskActivity反序列化异常”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。