Пользовательское поведение конечной точки с использованием стандартной webHttpEndpoint

#.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>