Библиотека WCF & Enterprise - Блок приложения для экранирования и проверки исключений - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть служба WCF, которая использует Enterprise Library для обработки исключений и интеграции валидации WCF. Кажется, они не работают вместе.

То, что я хочу, это:

  1. Если моя служба выдает какое-либо исключение, WCF Exception Shielding поймает это и выдаст FaultException<MyServiceFault>.
  2. Если входящее сообщение не проходит проверку, служба должна продолжать выбрасывать FaultException<ValidationFault>.

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

У меня есть некоторая конфигурация Enterprise Library, которая превращает каждое исключение в FaultException<MyServiceFault>. Если я получаю EnterpriseLibrary для регистрации исключений, которые он перехватывает, он говорит, что получает

Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractWrapperException

при сбое проверки. Но если добавить это исключение в конфигурацию как новый <exceptionType> с postHandlingAction из None, я все равно получу FaultException<MyServiceFault>, если проверка не пройдена.

Можно ли использовать экранирование исключений WCF для перехвата всех исключений, кроме исключений валидации WCF? Если нет, мне придется добавить больше настроек для всех различных исключений, которые могут быть выброшены - что за экранирование исключений в этом случае?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2011

В библиотеке есть ошибка, из-за которой решение, которое вы предоставили, не работает. Обходной путь - не изменять имя политики по умолчанию для блока экранирования исключений.

Перейдите по этой ссылке, чтобы добавить голосование к этой ошибке.

0 голосов
/ 17 ноября 2011

Хм, ну, хотя я думал, что уже попробовал это, похоже, что следующая конфигурация делает эту работу:

<add name="WCF Exception Shielding">
    <exceptionTypes>
        <add name="FaultException`1" type="System.ServiceModel.FaultException`1[[Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF.ValidationFault, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            postHandlingAction="NotifyRethrow" />
        <add name="All Exceptions" type="System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
            postHandlingAction="ThrowNewException">
            <exceptionHandlers>
                <add type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF.FaultContractExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.WCF, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                    faultContractType="MyServiceFault, MyServices"
                    name="Fault Contract Exception Handler" />
            </exceptionHandlers>
        </add>
    </exceptionTypes>
</add>

Любое исключение выдается внутри сервисного кода, оно выдается как FaultException<MyServiceFault> за исключением того, что блок приложения проверки WCF выдает исключение, тогда все работает как обычно, и клиент получает FaultException<ValidationFault>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...