webHttpBinding с помощью webMessageEncoding: как настроить? - PullRequest
3 голосов
/ 12 сентября 2009

У меня есть служба 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?

1 Ответ

5 голосов
/ 12 сентября 2009

Если вы определяете полное пользовательское связывание (как вы делаете здесь с 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>

Марк

...