webHttpBinding с использованием webMessageEncoding: как настроить?

У меня есть служба REST WCF. Он использует webHttpBinding, и конфигурация выглядит так:

<service name="IndexingService.RestService" behaviorConfiguration="IndexingService.Service1Behavior">
    <endpoint
      address=""
      binding="webHttpBinding"
      bindingConfiguration="CustomMapper"
      contract="IndexingService.IIndexingService"
      behaviorConfiguration="webby"/>
</service>

CustomMapper используется для применения пользовательского WebContentTypeMapper, который я пытался настроить следующим образом:

<binding name="CustomMapper">
        <webMessageEncoding webContentTypeMapperType="IndexingService.CustomContentTypeMapper, IndexingService" />
        <httpTransport manualAddressing="true" />
</binding>

Но я не могу понять, где в моем web.config я должен вставить эти строки:

  • Если я помещу эти строки ниже, я получу ошибку, потому что webMessageEncoding не является распознанным элементом.
  • Если я помещу строки под пользовательским тегом привязки, я получу сообщение об ошибке, что wsHttpBinding не имеет определенного CustomMapper!?

Может кто-нибудь объяснить, как использовать сопоставитель пользовательского типа вместе с webHttpBinding?


person Achim    schedule 12.09.2009    source источник


Ответы (1)


Если вы определяете полную пользовательскую привязку (как вы делаете здесь с CustomMapper):

<binding name="CustomMapper">
   <webMessageEncoding webContentTypeMapperType=
             "IndexingService.CustomContentTypeMapper, IndexingService" />
   <httpTransport manualAddressing="true" />
</binding>

тогда вам нужно использовать эту пользовательскую привязку в конечной точке службы, а не webHttpBinding! Этот раздел конфигурации не определяет только конфигурацию привязки!

Попробуйте вот эту конфигурацию:

<system.serviceModel>
  <bindings>
    <customBinding>
       <binding name="CustomMapper">
          <webMessageEncoding webContentTypeMapperType=
                 "IndexingService.CustomContentTypeMapper, IndexingService" />
          <httpTransport manualAddressing="true" />
       </binding>
    </customBinding>
  </bindings>
  <services>
    <service name="IndexingService.RestService"   
             behaviorConfiguration="IndexingService.Service1Behavior">
        <endpoint
           address=""
            binding="customBinding"
            bindingConfiguration="CustomMapper"
            contract="IndexingService.IIndexingService"
            behaviorConfiguration="webby"/>
     </service>
  </services>
</system.serviceModel>

Марк

person marc_s    schedule 12.09.2009
comment
Если я попытаюсь это сделать, я получу следующую ошибку: Не удалось найти расширение привязки конфигурации «system.serviceModel/bindings/CustomMapper». Убедитесь, что это расширение привязки правильно зарегистрировано в system.serviceModel/extensions/bindingExtensions и правильно написано. - person Achim; 12.09.2009
comment
Извините, моя ошибка - я давно этого не делал :-) Обновил свой ответ. Конечная точка должна быть привязкой = customBinding bindingConfiguration должна сопоставляться с CustomMapper - person marc_s; 12.09.2009