当前位置: 首页 > 知识库问答 >
问题:

如何序列化Azure服务总线中的异常?

左丘昊天
2023-03-14
        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属性标记希望序列化的所有成员。如果类型是集合,请考虑使用CollectionDataContractAttribute标记它。有关其他受支持的类型,请参阅Microsoft.NET Framework文档。

当我用[DataContract]标记MyException时,我得到的结果是:

Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时发生异常:Functions.ProcessQueueMessage2Async---->System.Runtime.Serialization.InvalidDataContractException:类型“MyException”不能是ISerializable并且具有DataContractAttribute属性。

可能是因为System.Exception实现了ISerializable。我该怎么解决呢?

共有1个答案

林俊晖
2023-03-14

您将无法使用DataContractSerializer序列化异常。即使您成功地用DataContract标记了类,内部异常也可能是任何类型的,因此不兼容。

因此您有两种选择:

>

  • 用另一个序列化程序序列化您的异常(然后将stream传递给brokeredmessage构造函数)。部分选项请参阅本题。

  •  类似资料:
    • 我一直在尝试创建一个客户端来连接我的Azure服务总线队列。我一直在参考此文档: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-java-how-to-use-queues#send-消息到队列。 我的代码: 在创建客户端时,我遇到以下错误: 通用域名格式。微软蔚蓝色的服务总线。原语。Service

    • 我使用此url中的示例http://azure.microsoft.com/en-us/documentation/articles/service-bus-java-how-to-use-jms-api-amqp/.我有两个问题: 1、ACS或SAS 连接URL, 用户名和密码来自ACS身份验证,但Azure服务总线已将其身份验证从ACS更改为SAS。它是否也支持SAS身份验证?就像用户名是SA

    • 我正在使用azure服务总线主题和订阅机制,并希望处理所有在死信队列中的消息。 此外,我想通过C#中的Azure Web作业处理消息,并将其发送回队列。所以我想知道如何通过我的应用程序处理死信队列上的消息?

    • 我有一个服务总线Q,从Azure门户可以或多或少地看到服务总线Q包含多少条目。如何使用他们的管理API获取此计数?我仔细阅读了文档,但没有找到答案。

    • 今天晚上,我们观察到排队时间非常慢。我们的追踪数据告诉我们 需要45-60秒。这种情况发生在两个已经存在很长时间的队列上。他们几乎从来没有超过1-2条记录,我们使用一个带有服务总线触发器的网络作业来完成任务。我们正在排队等候一个简单的POCO。还有另一个队列正在快速排队,所以由于没有任何其他想法,我删除了两个麻烦的队列。当代码重新创建它们时(正如它被构建时所做的那样),它们在不到一秒钟的时间里开始

    • 我有一个WCF服务,它连接到一个服务总线队列,准备接收消息。这是工作很好,但我希望能够标记的消息作为一个死信,如果我有一个问题处理的消息。当前,如果我的代码抛出异常,消息仍然会从队列中删除,但我希望能够在配置中指定不从队列中删除,但将其标记为死信。我做了一些搜索,但我不知道怎么做。我当前正在将该服务作为windows服务运行 Uri baseAddress=ServiceBusEnvironmen