У меня есть следующее украшение на моем сервисе
<ExceptionShielding("MyExceptionPolicyName")>
когда выдается исключение ошибки, моя политика улавливает ошибку и регистрируется просто отлично. Он принимает идентификатор handleInstance и регистрирует его вместе с ошибкой для справки. Что я замечаю, так это то, что Guid, возвращенный в ошибке «Идентификатор ошибки:», отличается от того, который был передан в обработку instanceId.
Я также пытался украсить операцию так
<FaultContract(GetType(ValidationFault))>
но это дает те же результаты.
Что я хотел бы сделать, так это каким-то образом зафиксировать этот «Идентификатор ошибки:», переданный потребителю, чтобы я мог зарегистрировать его вместе с исключением. * дополнительная информация: обработчик политики исключений является настраиваемым, который принимает исключение и записывает его различные свойства и данные в определенную схему базы данных журнала исключений.
Кто-нибудь знает, как это сделать?
ОБНОВЛЕНИЕ: согласно комментарию @Jay Patel, я добавил это в свою конфигурацию, чтобы включить трассировку
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\Temp\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
Затем я выполнил запрос, чтобы получить ответ об ошибке, защищенный защитой от исключений. Строка ответа об ошибке имеет следующий формат: «Произошла ошибка при использовании этой службы. Обратитесь к администратору за дополнительной информацией. Идентификатор ошибки: {GUID}»
Затем я просмотрел журнал трассировки и не нашел доказательств GUID или этой строки.
Вот pastebin ссылка на журнал трассировки для тех, кому интересно посмотреть пример использования ExceptionShielding.
ОБНОВЛЕНИЕ 2:
Опять же, согласно комментарию @Jay Patel, добавил это. Я попробовал значение -1 и max int для maxMessageLog, чтобы убедиться, что я получаю наибольший объем данных в этом журнале.
<diagnostics>
<messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="2147483647" />
</diagnostics>
Лог не помогает. Он не содержит ничего ни о чем, даже близком к ответу на мой вопрос.
Чтобы уточнить на случай, если вышеизложенное неясно... Я хочу иметь возможность перехватывать GUID после "Идентификатор ошибки:" в сообщении обратно клиенту, чтобы я мог регистрировать его, за исключением того, что регистрируется обработчиком исключений. Таким образом, клиенты могут связаться с «Администратором», как говорится в сообщении, с идентификатором ошибки и действительно смогут что-то найти.
Вот полная включенная трассировка pastbin