#.net #wcf #wcf-binding
#.net #wcf #wcf-привязка
Вопрос:
В настоящее время у нас есть работающий сервис REST WCF. Я пытаюсь реализовать пользовательское поведение для обработки ошибок, которое вернет пользовательский объект JSON. Я полагаю, что статья, найденная здесь, Обработка исключений WCF с помощью IErrorHandler поможет, однако в примере показано, как добавить поведение с помощью кода. Мы размещаем службу через IIS и у нас нет ServiceHost. Кто-нибудь может подсказать мне, как добавить мой пользовательский класс обработки ошибок в web.config?
Я искал по всему Google и SO и нашел ряд примеров, которые делают близко к тому, чего я пытаюсь достичь, но мое понимание WCF, вероятно, не позволяет мне полностью понять.
Вот все, что мы настроили для конечных точек.
<standardEndpoints>
<webHttpEndpoint>
<!--
Configure the WCF REST service base address via the global.asax.cs file and the default endpoint
via the attributes on the <standardEndpoint> element below
-->
<standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="false"/>
</webHttpEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
Комментарии:
1. У вас, безусловно, есть узел службы для каждого вызова. Это просто создается за кулисами для вас. Узел службы можно определить в файле svc, указав ваш собственный узел для создания экземпляра.
Ответ №1:
К сожалению, вам придется написать некоторый код. Хитрость заключается в том, чтобы поместить код в библиотеку классов, а затем настроить web.config для использования этого кода.
Скопируйте ErrorHandlerServiceBehavior
класс из используемого вами примера, скомпилируйте его в свой проект WCF.
Создайте расширение поведения:
<extensions>
<behaviorExtensions>
<add name="myBehavior" type="MyLibrary.ErrorHandlerServiceBehavior, MyLibrary,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
Примените расширение поведения к конфигурации поведения:
<behaviors>
<behavior configurationName="testBehaviorConfiguration">
<myBehavior />
</behavior>
</behaviors>
Примените конфигурацию поведения к службе:
<services>
<service name="MyLibrary.MyService"
behaviorConfiguration="testBehaviorConfiguration">
<endpoint binding="basicHttpBinding"
contract="MyLibrary.IMyService"/>
</service>
</services>