Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么system.exception在发送消息形状中不可序列化?_C#_Serialization_Exception Handling_Biztalk_Biztalk 2010 - Fatal编程技术网

C# 为什么system.exception在发送消息形状中不可序列化?

C# 为什么system.exception在发送消息形状中不可序列化?,c#,serialization,exception-handling,biztalk,biztalk-2010,C#,Serialization,Exception Handling,Biztalk,Biztalk 2010,我正在测试BizTalk 2010业务流程的异常处理。业务流程有一个作用域形状,其中附加了一个catch形状。 作用域形状的事务类型设置为“无”,因此我可以处理.NET异常。catch内部是一个带有消息分配形状的构造消息形状。消息分配形状正在使用接收形状中的活动消息类型 当业务流程运行时,它将挂起在发送消息形状上。错误是: 在Assembly System.Xml中键入System.Xml.XmlDocument,版本=4.0.0.0,区域性=neutral,PublicKeyToken=xxx

我正在测试BizTalk 2010业务流程的异常处理。业务流程有一个作用域形状,其中附加了一个catch形状。 作用域形状的事务类型设置为“无”,因此我可以处理.NET异常。catch内部是一个带有消息分配形状的构造消息形状。消息分配形状正在使用接收形状中的活动消息类型

当业务流程运行时,它将挂起在发送消息形状上。错误是:

在Assembly System.Xml中键入System.Xml.XmlDocument,版本=4.0.0.0,区域性=neutral,PublicKeyToken=xxx未标记为可序列化

我的项目设置为,出于测试目的,我可以处理传入的BizTalk消息或XML文件(通过测试编辑器) 我可以获取提交到接收形状的XML,将其保存为XML文件并处理XML文件

为了测试异常处理,我特意 对将失败的数据库插入进行编码。完整数据库错误将写入日志文件,并抛出一个新异常,其中包含以下消息: 无法处理BLAH完成请求-消息处理器-图像ID:ABC注释ID:XYZ。运行XML文件时,应用程序抛出错误 在预期的位置,错误会在测试编辑器中被捕获。我能够在测试编辑器函数中序列化错误消息

但是,当从BizTalk运行时,我得到了错误。已使用以下属性定义了相关集: BTS.ReceivePortName、ErrorReport.ErrorType、ErrorReport.InboundTransportLocation.
分配形状中的代码如下所示

msgFail = InputMsg;
msgFail(ErrorReport.ErrorType) = "FailedMessage";
msgFail(ErrorReport.Description) = ex.Message;
msgFail(ErrorReport.FailureCategory) = 0;
msgFail(ErrorReport.FailureCode) = "";
msgFail(ErrorReport.InboundTransportLocation) = InputMsg(BTS.InboundTransportLocation);
msgFail(ErrorReport.RoutingFailureReportID) = System.Convert.ToString(System.Guid.NewGuid());
msgFail是我试图发送的消息

InputMsg是初始接收形状中的活动消息类型。它是一种由多个部分组成的消息类型,与验证的模式相关联

ex
是catch形状中的
异常对象
名称。它属于System.Exception类型

我读过很多关于如何设置作用域和捕捉形状的属性以使用异常对象的文章,但它仍然不起作用。

我假设,由于我可以在从XML文件运行时序列化错误消息,因此我的问题在于我的业务流程如何获得异常。

如果安装了ESB工具包,则可以使用它来创建错误消息

e、 g

注意1:orchestrationName是在业务流程中较早设置的变量

orchestrationName = Microsoft.XLANGs.Core.Service.RootService.Name;

注2:在本例中,您的msgFail是eSBFault,但您也可以将其称为msgFail。它的消息类型为Microsoft.Practices.ESB.ExceptionHandling.Schemas.Faults.FaultMessage

您确定这是一个普通的异常吗?@SOreadytohelp,谢谢。不知道你说的“香草”是什么意思。如果我对传入消息所做的唯一更改是将注释文本置于数据库列的max下,则业务流程将运行到完成并将其消息发送到外部系统,因此我非常确定何时以及如何引发异常。您只需在hander本身中定义异常对象ex,不在范围级别。但是,序列化警告并不是关于异常(标题),而是关于众所周知的XmlDocument。你能澄清一下吗?@Johns-305,谢谢。不确定你想澄清什么。是,ex在Catch Exception形状中定义-Exception Object Name=ex。Exception Object Type=System.SystemException。我不知道它指的是什么XML文档。它是来自接收形状的传入消息吗?它将是不在原子作用域/业务流程中的任何XmlDocument。在标题中,您询问的是System.Exception不可序列化,但这正是本文所要问的。
orchestrationName = Microsoft.XLANGs.Core.Service.RootService.Name;