我一直在尝试创建一个使用基本身份验证的WCF服务,到目前为止,我一直在发出一条错误消息,指出该服务需要匿名身份验证,即使我认为我已将web.config配置为使用Basic身份验证。
我花了几个小时尝试并且未能找到问题的解决方案,所以我想在这里尝试一下。我怀疑这是我忽视的东西。
这就是我正在做的事情。我创建了一个Web项目,添加了一个wcf服务,创建了另一个Web项目,并添加了一个.aspx页面来测试该服务。我没有在默认的wcf服务配置中更改 ANYTHING 。我可以部署到IIS,如果我打开浏览器窗口并导航到该页面,一旦启用匿名身份验证,该服务就可以正常工作。我也可以使用测试页面来访问服务而没有任何问题。
然后,我将服务更改为使用基本身份验证(请参阅下面的服务的web.config)并重新部署。我没有更改IIS的身份验证以使用Basic,因此它仍设置为使用匿名身份验证。我刷新了浏览器并显示了服务。测试网页仍然可以访问该服务。
然后,我在IIS中更改了身份验证方案以使用Basic,并确保禁用所有其他类型的身份验证。当我尝试访问该服务时,我收到错误消息“此服务的安全设置需要'匿名'身份验证,但未为承载此服务的IIS应用程序启用。”
这是我的服务的web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<bindings>
<wsHttpBinding>
<binding name="basicAuthBinding">
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="TestService">
<endpoint address="http://localhost:7000/BA.svc" binding="wsHttpBinding" bindingConfiguration="basicAuthBinding" name="BasicEndpoint" />
</service>
</services>
</system.serviceModel>
</configuration>
为什么这不起作用?
答案 0 :(得分:0)
根据How can I use WCF with only basichttpbinding, SSL and Basic Authentication in IIS?中的一些建议,您可以用basicHttpBinding替换wsHttpBinding,设置<serviceMetadata httpsGetEnabled="true" />
并在IIS上启用SSL吗?
或者出于某种原因这不是您想要托管服务的方式吗?