Ну, ваш сервис использует wsHttpBinding, который по умолчанию потребует учетные данные пользователя Windows - чего, очевидно, не будет у ваших внешних пользователей. Это не WCF сам по себе, который использует учетные данные Windows по умолчанию (как вы заявляете), но на самом деле это конкретная привязка (wsHttpBinding) - другие могут по умолчанию использовать другие настройки.
У вас есть несколько вариантов:
- настроить wsHttpBinding (что довольно «тяжеловесно»), чтобы вообще не использовать защиту или использовать защиту имени пользователя / пароля, которую вызывающие абоненты должны будут обеспечить
- вместо этого используйте basicHttpBinding без защиты (это модель ASMX, в основном)
Чтобы полностью отключить защиту от wsHttpBinding, включите это в вашу конфигурацию:
<bindings>
<wsHttpBinding>
<binding name="NoSecurity">
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
, а затем настройте конечные точки для использования этой конфигурации привязки:
<system.serviceModel>
<services>
<service name="XX.ZZ.WebService.MyService"
behaviorConfiguration="XX.ZZ.WebService.MyServiceBehavior">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="NoSecurity"
contract="XX.ZZ.WebService.IMyService">
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
Вы можете сделать то же самое с <basicHttpBinding>
вместо <wsHttpBinding>
, если хотите (использование wsHttpBinding по сравнению с basicHttpBinding бесполезно, если вы отключили защиту и все другие более продвинутые функции, которые предлагает wsHttpBinding).
Есть также действительно хорошая серия постов в блоге , в которой рассказывается об основах безопасности WCF с точки зрения пяти различных типичных сценариев - отлично читайте!
Марк