我目前正在使用服務引用和生成的.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向下級梯級)轉換爲人類可讀消息的其他類都被遮蓋。
任何人都可以借我一些見解如何最好地得到實際的錯誤代碼/消息嗎?謝謝!