WCF 4 REST - несколько стандартных конечных точек для аутентификации - PullRequest
2 голосов
/ 10 ноября 2011

Поэтому я пытаюсь настроить приложение WCF 4 REST для использования нескольких стандартных конечных точек (для функции справки). Причина этого заключается в том, что в моем процессе IIS хостинга включена анонимная проверка подлинности и проверка подлинности Windows, и определенные конечные точки в моем приложении WCF требуют одного или другого (оба результата приводят к исключению).

Ранее я мог сделать это, определив некоторые привязки:

<bindings>
  <webHttpBinding>
    <binding name="Anonymous">
      <security mode="None" />
    </binding>

    <binding name="WindowsAuthentication">
      <security mode="TransportCredentialOnly">
        <transport clientCredentialType="Windows" />
      </security>
    </binding>
  </webHttpBinding>
</bindings>

А затем определить службы следующим образом:

<services>
  <service name="Host.SubscriberInfoHost">
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="WindowsAuthentication" contract="Host.ISubscriberInfoHost" />
  </service>
  <service name="Utilities.Instrumentation.ServiceStatus.ServiceStatusHost">
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="Anonymous" contract="Utilities.Instrumentation.ServiceStatus.IServiceStatusHost" />
  </service>
</services>

Это то, что я пытался сделать до сих пор, используя стандартную модель конечных точек:

    <standardEndpoints>
        <webHttpEndpoint>
            <standardEndpoint name="Host.SubscriberInfoHost" helpEnabled="true" automaticFormatSelectionEnabled="true">
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows" />
              </security>
             </standardEndpoint>

            <standardEndpoint name="Utilities.Instrumentation.ServiceStatus.IServiceStatusHost" helpEnabled="true" automaticFormatSelectionEnabled="true">
              <security mode="None" />
            </standardEndpoint>
        </webHttpEndpoint>
    </standardEndpoints>

Однако при этом запутывается служба, поскольку я получаю:

System.InvalidOperationException: IIS specified authentication schemes 'Negotiate, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used

Это именно то, от чего я пытаюсь уйти. Может ли кто-нибудь помочь мне разобраться, как бы я создал ситуацию, используя новую стандартную модель конечных точек? Спасибо!

1 Ответ

2 голосов
/ 14 ноября 2011

Нашел ответ на это после некоторых экспериментов.Оказывается, что атрибут «name» для стандартных конечных точек на самом деле является конфигурацией конечной точки.Таким образом, вы будете использовать следующие стандартные конечные точки:

<standardEndpoint name="WindowsAuthentication" helpEnabled="true" automaticFormatSelectionEnabled="true"> 
          <security mode="TransportCredentialOnly"> 
            <transport clientCredentialType="Windows" /> 
          </security> 
 </standardEndpoint> 

 <standardEndpoint name="Anonymous" helpEnabled="true" automaticFormatSelectionEnabled="true"> 
          <security mode="None" /> 
 </standardEndpoint> 

И затем вы также сконфигурируете сервис, такой как следующий (атрибуты "kind" и "endpointConfiguration" должны быть установлены, чтобы связать этоконечная точка к стандартной конечной точке выше)

  <service name="SomeEndpoint">
    <endpoint address="" kind="webHttpEndpoint" endpointConfiguration="WindowsAuthentication" contract="ISomeEndpoint" />
  </service>

Это позволяет смешивать стили аутентификации, сохраняя при этом страницу справки удобной службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...