Проверка WCF EntLib — изменение текста причины ошибки SOAP по умолчанию

StackOverflow https://stackoverflow.com/questions/1164602

  •  19-09-2019
  •  | 
  •  

Вопрос

я использую Блок приложения проверки корпоративной библиотеки для моего сервиса WCF.Все в порядке, и потребители .Net могут уловить FaultException<ValidationFault> исключение, чтобы получить коллекцию удобочитаемых бизнес-ошибок.Однако для потребителей, не использующих .Net, это выглядит не так хорошо, особенно для тех, кто будет просматривать необработанное сообщение SOAP.Текст причины SOAP всегда "Причину этой неисправности автор не указал.«Это не очень полезно, так как является причина, она указана под <Detail> элемент, как показано в примере сообщения о неисправности ниже.

Есть ли способ изменить текст "Причину этой неисправности автор не указал."к чему-то более полезному, например"См. сведения о ValidationFault."?

<s:Body>
   <s:Fault>
      <s:Code>
         <s:Value>s:Sender</s:Value>
      </s:Code>
      <s:Reason>
         <s:Text xml:lang="en-GB">The creator of this fault did not specify a Reason.</s:Text>
      </s:Reason>
      <s:Detail>
         <ValidationFault xmlns="http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <Details xmlns:b="http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF">
               <b:ValidationDetail>
                  <b:Key i:nil="true"/>
                  <b:Message>Value Validator</b:Message>
                  <b:Tag>request</b:Tag>
               </b:ValidationDetail>
            </Details>
         </ValidationFault>
      </s:Detail>
   </s:Fault>
</s:Body>
Это было полезно?

Решение

Что ж, похоже, что люди из EntLib об этом не подумали.Я отметил, где необходимо внести изменения в код EntLib, и поднял вопрос. проблема на их сайте CodePlex.Я думаю, что это также может быть сделано кем угодно в рамках Энтлибконтриб проект, но они, кажется, все еще находятся в корпоративной библиотеке 3.1, тогда как я использую 4.1.

Я думаю, если кто-то в отчаянии, решением будет загрузить исходный код EntLib и изменить BeforeCall метод в ValidationParameterInspector класс (в Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF пространство имен).Именно здесь FaultException создано.Перегрузка этого конструктора может указать FaultReason.

Другие советы

Как ваша служба WCF генерирует эти ошибки?

Когда вы смотрите на Исключение ошибки в WCF, существует множество способов создать один из них, включая некоторые конструкторы которые позволяют указать FaultReason для ошибки SOAP.

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top