【发布时间】:2017-12-04 04:12:50
【问题描述】:
我正在尝试将 WebJob 执行的结果发送到响应队列:
var message = new BrokeredMessage(exception);
outputMessages.Add(message);
我的异常类代表一个逻辑错误:
public class MyException : Exception{
public MyException(){}
public MyException(string message) : base(message){}
public MyException(string message, Exception inner) : base(message, inner){}
protected MyException(SerializationInfo info, StreamingContext context) : base(info, context){}
public object MyProp { get; set; }
}
但是,我得到以下异常:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常 执行功能时:Functions.ProcessQueueMessage2Async ---> System.Runtime.Serialization.InvalidDataContractException:类型 'MyException' 不能被序列化。考虑用 DataContractAttribute 属性,并标记您的所有成员 想要使用 DataMemberAttribute 属性进行序列化。如果类型 是一个集合,考虑用 集合数据合同属性。请参阅 Microsoft .NET 框架 其他受支持类型的文档。
当我用[DataContract] 标记MyException 时,我得到了这个:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:异常 执行功能时:Functions.ProcessQueueMessage2Async ---> System.Runtime.Serialization.InvalidDataContractException:类型 “MyException”不能是 ISerializable 并且具有 DataContractAttribute 属性。
可能是因为System.Exception 实现了ISerializable。我该如何解决?
【问题讨论】:
-
“向响应队列发送异常 [...]” - 接收者真的需要整个异常 object 吗?或者使用
.ToString()、状态码或一些自定义消息包会更好吗? -
恐怕我不能使用字符串或枚举,因为我需要传递其他信息(在我的示例中为
MyProp)以正确格式化 UI 上的错误消息。
标签: c# .net serialization azure-webjobs azureservicebus