如何获取Dynamics AX中的SOAP错误的详细信息?

问题描述:

我目前正在使用服务引用和生成的.NET类与AX内的外部SOAP服务进行通信。除了如何处理SOAP错误之外,所有的工作都非常成功。理想情况下,这不会发生,但有时SOAP服务器(我也控制它)会抛出带有“代码”和“消息”的SOAP错误。代码及其相应消息的一些示例:如何获取Dynamics AX中的SOAP错误的详细信息?

  • “INVALID_API_KEY”/“使用了无效的API密钥。”
  • “INVALID_CUSTOMER_ID”/“无效的客户ID已通过(%d)”。

这些错误代码是在WSDL中定义的,所以当这些错误被抛出时,我可以自然地将一些消毒过的消息传回给用户。不幸的是,我遇到了一个问题,通过X ++进行深入研究,发现,其中 SOAP错误已被抛出,因此我可以显示回到我的用户的故障消毒解释。目前我的代码看起来像:

try 
{ 
    new InteropPermission(InteropKind::ClrInterop).assert(); 

    // ... code making SOAP calls 

    CodeAccessPermission::revertAssert(); 
} 
catch(Exception::CLRError) 
{ 
    warning(AifUtil::getClrErrorMessage()); 
} 

此处理SOAP错误不够好,它产生的错误是:在装配“类型”System.ServiceModel.Channels.ReceivedFault“System.ServiceModel,版本= 3.0 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化。“

我已经尝试钻取基本的.NET类,但ServiceModel(以及后续)用于将SOAP错误(FaultException向下级梯级)转换为人类可读消息的其他类都被遮盖。

任何人都可以借我一些见解如何最好地得到实际的错误代码/消息吗?谢谢!

你可以使用WCF跟踪http://msdn.microsoft.com/en-us/library/ms733025.aspx

或者你可以检查使用网络嗅探器像小提琴手的响应。