IIS размещал WCF-сервис + аутентификацию Windows в IIS + TransportCredentialOnly / аутентификацию Windows в basicHttpBinding - PullRequest
21 голосов
/ 20 октября 2008

Я хочу создать WCF-сервис, размещенный в IIS6, и отключить анонимную аутентификацию в IIS. И не используйте SSL.

Таким образом, у меня есть только один способ - использовать basicHttpBinging с TransportCredentialOnly, не так ли?

Я создаю виртуальный каталог, устанавливаю встроенную аутентификацию Windows и снимаю флажок «Включить анонимный доступ».

Вот мой web.config:

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="MyBinding">
                    <security mode="TransportCredentialOnly">
                        <transport clientCredentialType="Windows" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <services>
            <service name="Samples.ServiceFacadeService" behaviorConfiguration="ServiceFacadeServiceBehavior">
                <endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
                          contract="Samples.IServiceFacadeService">
                </endpoint>
            </service>
        </services>
    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceFacadeServiceBehavior">
                <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
</system.serviceModel>

Вы видите, что я даже не включил MEX-enpoint для обмена метаданными. Только одна конечная точка и одна привязка для нее с безопасностью TransportCredentialOnly.

Но когда я пытаюсь запустить службу (вызывая метод через клиентский прокси), я получаю такое исключение в EventLog:

Исключение: System.ServiceModel.ServiceActivationException: Сервис '/Wcftest/ServiceFacadeService.svc' не может быть активирован из-за исключение во время компиляции. сообщение об исключении: Безопасность настройки для этого сервиса требуют «Анонимная» аутентификация, но она не включен для приложения IIS где находится этот сервис .. ---> System.NotSupportedException: безопасность настройки для этого сервиса требуют «Анонимная» аутентификация, но она не включен для приложения IIS где размещен этот сервис.

Понятия не имею, почему мой сервис требует анонимной аутентификации? Почему?

Ответы [ 4 ]

8 голосов
/ 20 октября 2008

Ответ нашел Джезелл. Благодарю. Я перепутал bindingName и bindingConfiguration:

<endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
          contract="Samples.IServiceFacadeService">
</endpoint>

Верно:

<endpoint address="" binding="basicHttpBinding" **bindingConfiguration**="MyBinding"
          contract="Samples.IServiceFacadeService">
</endpoint>
7 голосов
/ 20 октября 2008

Возможно, проблема с конечной точкой MEX (см. post ). Попробуйте отключить MEX следующим образом:

<services>
    <!-- Note: the service name must match the configuration name for the service implementation. -->
    <service name="MyNamespace.MyServiceType" behaviorConfiguration="MyServiceTypeBehaviors" >
        <!-- Add the following endpoint.  -->
        <!-- Note: your service must have an http base address to add this endpoint. -->
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    </service>
</services>

<behaviors>
    <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
            <!-- This disables it. -->
            <serviceMetadata httpGetEnabled="false" />
        </behavior>
    </serviceBehaviors>
</behaviors>

Вот хороший пост о защите MEX.

3 голосов
/ 07 сентября 2010

Используйте basicHttpBinding для вашей конечной точки mex и примените ту же конфигурацию привязки:

1 голос
/ 26 января 2011

Чтобы проект службы VS wcf (новый пример проекта) работал с аутентификацией в IIS, вам необходимо:

1) Разрешить анонимный доступ в IIS
2) Префикс ваших открытых методов с таким атрибутом:

[PrincipalPermission(SecurityAction.Demand, Role = "MyADGroup")]
public string SendMyMessage(string Message)
{...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...