Проверка WCF EntLib — изменение текста причины ошибки SOAP по умолчанию
Вопрос
я использую Блок приложения проверки корпоративной библиотеки для моего сервиса 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.
Марк