Как получить подробную информацию о сбое SOAP в Dynamics AX? - PullRequest
1 голос
/ 29 января 2010

В настоящее время я общаюсь с внешней службой SOAP в AX, используя ссылку на службу и сгенерированный класс .NET. Все работает отлично, за исключением того, как обрабатывать ошибки SOAP. В идеале этого не происходит, но иногда SOAP-сервер (который я тоже контролирую) выдает ошибку SOAP с «кодом» и «сообщением». Некоторые примеры кодов и соответствующих сообщений:

  • "INVALID_API_KEY" / "Использован неверный ключ API."
  • "INVALID_CUSTOMER_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, Культура = нейтральная, PublicKeyToken = b77a5c561934e089 'не помечен как сериализуемый. "

Я пытался развернуть базовые классы .NET, но ServiceModel (и впоследствии) другие классы для преобразования ошибки SOAP (FaultException вниз по лестнице классов) в удобочитаемое сообщение скрыты.

Может ли кто-нибудь дать мне некоторое представление о том, как лучше узнать фактический код ошибки / сообщение? Спасибо!

1 Ответ

0 голосов
/ 31 января 2010

Вы можете использовать трассировку wcf http://msdn.microsoft.com/en-us/library/ms733025.aspx

Или вы можете проверить ответ, используя сетевой сниффер, например fiddler.

...