Ответ 1
Отправьте это сообщение Николасом Алленом из команды WCF по этой точной проблеме:
http://blogs.msdn.com/drnick/archive/2007/03/23/preventing-anonymous-access.aspx
Я хочу создать WCF-сервис, размещенный в IIS6, и отключить анонимную аутентификацию в IIS. И не используйте SSL.
Так что единственный способ, которым я располагаю, - использовать basicHttpBinging с TransportCredentialOnly
, его не?
Я создаю виртуальный каталог, устанавливаю Windows Integrated Auth и снимите флажок "Включить анонимный доступ".
Здесь мой 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 который размещает эту службу.
Я понятия не имею, почему мой сервис требует анонимного auth? Почему?
Отправьте это сообщение Николасом Алленом из команды WCF по этой точной проблеме:
http://blogs.msdn.com/drnick/archive/2007/03/23/preventing-anonymous-access.aspx
Ответ найден jezell. Благодарю. Я перепутал bindingName и bindingConfiguration:
<endpoint address="" binding="basicHttpBinding" bindingName="MyBinding"
contract="Samples.IServiceFacadeService">
</endpoint>
Это право:
<endpoint address="" binding="basicHttpBinding" **bindingConfiguration**="MyBinding"
contract="Samples.IServiceFacadeService">
</endpoint>
Конечная точка 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>
Вот хороший post для обеспечения MEX.
Используйте basicHttpBinding для вашей конечной точки mex и примените ту же привязкуКонфигурация:
Чтобы получить проект службы VS wcf (новый образец проекта) для работы с аутентификацией в IIS, вам необходимо:
1) Разрешить анонимный доступ в IIS
2) Присвойте свои общедоступные методы атрибуту, подобному этому:
[PrincipalPermission(SecurityAction.Demand, Role = "MyADGroup")]
public string SendMyMessage(string Message)
{...}