2009-07-22 2 views
0

Я использую Enterprise Library Validation Application Block для моей службы WCF. Все в порядке, и пользователи .Net могут поймать исключение FaultException<ValidationFault>, чтобы получить сборник человеко-читаемых бизнес-ошибок. Тем не менее, это не выглядит так же хорошо для потребителей, не являющихся клиентами, особенно тех, которые будут смотреть на необработанное сообщение SOAP. Текст SOAP Reason всегда «Создатель этой ошибки не определил причину.« Это не очень полезно, так как там - это причина, указанная в элементе <Detail>, как показано в примере Сообщение об ошибке ниже.Проверка WCF EntLib - изменение по умолчанию SOAP Fault Текст причины

Есть ли способ, чтобы изменить текст «Создатель этой ошибки не указано Причина.» к чему-то более полезным, как «See 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> 
+0

У меня такая же проблема. Я думаю, что нет способа сделать это, используя платформу validationbehaviour для WCF для корпоративной библиотеки. – softveda

+0

Да, я исследовал это некоторое время назад до дней StackOverflow, и это был вывод, к которому я пришел, но я думал, что отправлю сюда, чтобы проверить! –

ответ

3

Ну, похоже, люди EntLib не думали об этом. Я отметил, где должно быть изменение кода EntLib, и поднял issue at their CodePlex site. Я предполагаю, что это также может быть сделано кем-либо в рамках проекта EntLibContrib, но они все еще остаются в Enterprise Library 3.1, тогда как я использую 4.1.

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

+1

Правильно, и вы также должны вытащить 'FaultReason' из конфигурации. –

0

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

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

Марк

+0

Да, но проверка EntLib начинается до кода моей службы. Служба может обрабатывать ошибки, возникающие после того, как проверочная проверка произошла, и завершить их в SOAP Faults в порядке, но проверка выполняется немного раньше всего этого. –

+0

Однако в этом случае исключение FaultException создается корпоративной библиотекой, а не явно кодом пользователя. – softveda

+1

Затем вы можете настроить код Enterprise Library (и внести его обратно). Я бы рекомендовал извлечь причину из записи конфигурации. –

Смежные вопросы