我想创建一个托管在IIS6中的WCF服务,并禁用IIS中的匿名身份验证。而且不使用SSL。
那么我唯一的选择是使用带有TransportCredentialOnly
的basicHttpBinging,对吗?
我创建了一个虚拟目录,设置了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端点。只有一个端点和一个带有TransportCredentialOnly安全性的绑定。
但是当我尝试启动服务(通过客户端代理调用方法)时,在事件日志中出现了这样的异常:
异常: System.ServiceModel.ServiceActivationException: 由于编译期间的异常,无法激活服务'/wcftest/ServiceFacadeService.svc'。 异常消息为:此服务的安全设置需要“匿名”身份验证,但未为托管此服务的IIS应用程序启用它.. ---> System.NotSupportedException: 此服务的安全设置需要“匿名”身份验证,但未为托管此服务的IIS应用程序启用它。
我不知道为什么我的服务需要匿名身份验证?为什么?