Получение исключения параметра безопасности при доступе к службе WCF

Ниже приведены конфигурации привязки моей службы WCF.

  • Анонимный доступ: выключен
  • Базовая аутентификация: включена
  • Встроенная проверка подлинности Windows: выключена !!

поддерживает протокол HTTP.

При доступе к службе WCF я получаю следующее исключение:

Настройки безопасности для этой службы требуют "анонимной" аутентификации, но она не включена для приложения IIS, в котором размещена эта служба.

<system.serviceModel>

    <bindings>

          <basicHttpBinding>

                <binding name="MyBinding">

                      <security mode="TransportCredentialOnly">                           

                            <transport clientCredentialType ="Basic" />

                      </security>

                </binding>

          </basicHttpBinding>

    </bindings>

<services>

        <service behaviorConfiguration="WMWcfWebServiceLib.Service1Behavior"

          name="WMWcfWebServiceLib.WMWcfWebService">

              <endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding"

                contract="WMWcfWebServiceLib.IWMWebService">                    



              </endpoint>

              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

              <host>

                    <baseAddresses>

                          <add baseAddress="http://localhost:8731/Design_Time_Addresses/WMWcfWebServiceLib/Service1/" />

                    </baseAddresses>

              </host>

        </service>

  </services>

<behaviors>

  <serviceBehaviors>

    <behavior name="WMWcfWebServiceLib.Service1Behavior">

      <!-- To avoid disclosing metadata information, 

      set the value below to false and remove the metadata endpoint above before deployment -->

      <serviceMetadata httpGetEnabled="True"/>

      <!-- To receive exception details in faults for debugging purposes, 

      set the value below to true.  Set to false before deployment 

      to avoid disclosing exception information -->

      <serviceDebug includeExceptionDetailInFaults="False" />

    </behavior>

  </serviceBehaviors>

</behaviors>

Please Help!!

Изменить

Я могу получить доступ к службе WCF через веб-браузер со следующими изменениями:

Изменяет режим безопасности на TransportCredentialOnly и удаляет конечную точку Mex, но теперь очевидно, что я не могу создать прокси на стороне клиента.

Пожалуйста, дайте мне знать, где я ошибаюсь?


person Ashish Ashu    schedule 18.01.2011    source источник
comment
Служба размещена в IIS?   -  person Ladislav Mrnka    schedule 18.01.2011
comment
Как получить доступ к услуге? Если ваша конфигурация используется, она должна поддерживать только HTTPS.   -  person Ladislav Mrnka    schedule 18.01.2011
comment
Я хочу поддерживать только HTTP, тогда мне следует изменить мою конфигурацию?   -  person Ashish Ashu    schedule 18.01.2011


Ответы (1)


Если вы хотите поддерживать только HTTP, ваша конфигурация вообще не используется, потому что mode="Transport" требует HTTPS. Сначала выясните, почему конфигурация не используется (возможно, неправильное имя типа в сервисном элементе). Затем измените режим безопасности на TransportCredentialOnly. Но имейте в виду, что TransportCredentialOnly + Обычная проверка подлинности означает, что HTTP-запросы будут содержать имя пользователя и пароль Windows в виде простого текста. В большинстве случаев такая реализация не проходит аудит безопасности.

Редактировать:

Вы можете создать прокси без конечной точки mex, если вы по-прежнему поддерживаете httpGetEnabled поведение метаданных службы.

person Ladislav Mrnka    schedule 18.01.2011
comment
Я внес вышеупомянутые изменения. например, установите режим TansportCredentialOnly, и я использую обычную проверку подлинности. Флаг httpGetEnable установлен в True. Но я все еще не могу получить доступ к услуге. Однако, если я удалю конечную точку Mex, служба WCF будет доступна, но я не смогу раскрыть метаданные, и, следовательно, клиент не сможет создать прокси !! Мне интересно, какой вариант позволяет получать метаданные только через HTTP. - person Ashish Ashu; 18.01.2011
comment
Если у вас есть httpGetEnabled, вы можете написать WMWebService.svc? Wsdl, и вы получите метаданные. - person Ladislav Mrnka; 18.01.2011
comment
Есть ли способ, с помощью которого моя служба wcf предоставляет метаданные без удаления конечной точки mex с такой же или любой другой конфигурацией? - person Ashish Ashu; 18.01.2011
comment
Я предполагаю, что проблема здесь в том, что WCF, размещенный в IIS, не любит одну защищенную конечную точку на основе HTTP и одну незащищенную. Я не могу сейчас это проверить. Если я прав, решением было бы потребовать базовую аутентификацию для конечной точки mex, но это означает настраиваемую привязку. - person Ladislav Mrnka; 18.01.2011
comment
Спасибо, Ладислав, моя проблема была решена после того, как я использовал ту же привязку для конечной точки mex .. Спасибо за помощь !! - person Ashish Ashu; 20.01.2011