2

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

Приложение типа контента/мыло + 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, поэтому у меня нет всех моих уток подряд.

Спасибо,

+0

Что такое конфигурация вашего клиента? –

ответ

4

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

В вашем втором примере проблема заключается в конфигурации WsHttpBinidng по умолчанию. WsHttpBinding по умолчанию защищен защитой сообщений и аутентификацией Windows = >, потому что машины находятся в разных доменах, поэтому Windows auhtentication не может работать. Вы должны определить свою собственную конфигурацию 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> 
+1

Спасибо за ваш ответ! Я добавил в предложенную вами конфигурацию и установил адрес конечной точки для URL-адреса, в котором работает служба, и теперь я получаю другую ошибку. Он начинается с того, что «Безопасный канал нельзя открыть, потому что переговоры по безопасности с удаленной конечной точкой не удались». –