Привязка службы WCF wsHttp против базовой без аутентификации - PullRequest
2 голосов
/ 29 сентября 2010

Я пытаюсь создать службу WCF с анонимной аутентификацией. При развертывании службы на конечном сервере, который не находится в моем текущем домене, я получаю следующую ошибку при попытке вызвать ее:

Тип контента приложения / мыло + xml; charset = utf-8 не поддерживается услуга http://myserver.com/page.svc. Привязки клиента и сервиса могут быть несовпадающий.

в нынешнем виде у меня есть следующий раздел в файле web.config для службы:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    </modules>
  </system.webServer>

Я пробовал различные привязки (wsHttpBinding и basicHttpBinding), но я либо получаю сообщение об ошибке выше (используя basicHttpBinding), либо сообщение «Доступ запрещен» (используя wsHttpBinding). Вот раздел web.config, который я пытался использовать при использовании wsHttpBinding

 <system.serviceModel>
  <services>
   <service behaviorConfiguration="AMP.MainBehavior" name="AMP.Main">
    <endpoint address="" binding="wsHttpBinding" contract="AMP.IMain">
      <identity>
        <dns value="myservice.com"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
   </service>
  </services>
  <behaviors>
    <serviceBehaviors>
    <behavior name="AMP.MainBehavior">
     <serviceMetadata httpGetEnabled="true"/>
     <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
   </serviceBehaviors>
  </behaviors>
 </system.serviceModel>

Служба была создана с платформой .NET 4.0. Мне нужно, чтобы это было анонимно, но я не уверен, что мне не хватает. Я новичок в WCF, поэтому у меня пока нет всех моих уток подряд.

Спасибо,

1 Ответ

4 голосов
/ 29 сентября 2010

Ошибка говорит о том, что вы отправляете HTTP-запрос с типом контента, который не поддерживается.Упомянутый тип контента используется в SOAP 1.2, но BasicHttpBinding использует SOAP 1.1 с другим типом контента (text / xml; charset = utf-8).Таким образом, возможно, существует некоторое несоответствие между вашей службой и конфигурацией клиента.

Во втором примере проблема заключается в конфигурации WsHttpBinidng по умолчанию.WsHttpBinding по умолчанию защищен защитой сообщений и аутентификацией Windows =>, поскольку машины находятся в разных доменах, поэтому аутентификация Windows не может работать.Вы должны определить свою собственную конфигурацию WsHttpBinding.Попробуйте это (та же конфигурация привязки должна использоваться на клиенте):

<system.serviceModel>
  <bindings>
    <wsHttpBinding>
      <binding name="Unsecured">
        <security mode="None" />   
      </binding>
    </wsHttpBinding>
  </bindings>
  <services>
    <service ...>
      <endpoint address="..." contract="..." 
         binding="wsHttpBinding" bindingConfiguration="Unsecured" />
      ...
    </service>
  </services>
</system.serviceModel>
...