WCF异常:...此服务需要“匿名”身份验证,但不支持承载此服务的IIS应用程序

时间:2012-03-16 21:35:21

标签: windows wcf security iis anonymous

我已经看到过这里和很多次被问到这个问题,但是我无法理解它。

这就是我想要做的。我需要在IIS 6中托管WCF服务。我想要用户名/密码安全性,我不希望这些传递未加密,所以我使用的是HTTPS。我在IIS上本地工作,但是当我来部署它时,我得到匿名访问未启用错误。在我的本地IIS上启用匿名访问,在部署的服务器上它不是,我们不想启用它。问题理解。解决方案对我来说并不明显......

如果我导航到IE中的页面,或者从Visual Studio添加服务引用,输入我的用户名/密码后会出现此错误。这样就表明我的证书和HTTPS工作正常,用户名和密码都是正确的。以下是web.config中的相关设置:

<services>
  <service name="SecureWcfTestsApplication.Service1">
    <endpoint address=""
      binding="wsHttpBinding"
      bindingConfiguration ="Binding2"
      contract="SecureWcfTestsApplication.IService1" />
  </service>
</services>

<bindings>
  <basicHttpBinding>
  </basicHttpBinding>
  <wsHttpBinding>
    <binding name="Binding2">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="Windows" algorithmSuite="Default" />
      </security>
    </binding>        
  </wsHttpBinding>
</bindings>

我正在使用wsHttpBinding,因为它不喜欢将clientCredentialType设置为Windows的basicHttpBinding。说过我宁愿使用basicHttp,但是它想要UserName作为clientCredentialType,我不确定UserName和Windows安全性之间有什么区别。

最佳

4 个答案:

答案 0 :(得分:1)

如果您未使用Windows身份验证http://msdn.microsoft.com/en-us/library/ms733089.aspx

配置传输安全性,则会收到异常 虽然您已经定义了<transport>标记,但在这种情况下需要

<message>标记。

答案 1 :(得分:1)

在IIS管理器中,单击您的站点。您需要“在功能视图中”(而不是“内容视图”)

在“功能视图”的IIS部分中选择所谓的功能“身份验证”,然后单击它。您可以在此处启用Windows身份验证。通过web.config(...)

中的设置也可以(我认为在线程中的一个建议中)

但也许你有一个web.config,你不想过多地注释。然后这个线程不会太多帮助,这就是为什么我添加了这个答案

答案 2 :(得分:0)

匿名身份验证可以,在某些情况下必须为服务启用,但不能为站点启用。

因此,请检查您网站的“root”身份验证是否仅启用了Windows身份验证。然后展开您的站点,选择“服务”文件夹并确保您的服务启用了Windows和匿名身份验证。

至少我与基本的MSSQL Master Data Services网站有相同的错误信息&amp;服务,这是解决方案。我在运行该服务时确实收到了错误但该网站工作正常,MDS Explorer无法正常工作,因为服务的身份验证设置最初是错误的。在创建新的MDS站点时,这种错误配置的原因可能是MDS配置管理器中的错误?

所以在我的情况下,问题不是通过对web.config或ApplicationHost.config文件进行任何特殊编辑来修复,而只是选择正确的网站身份验证设置及其在IIS管理器中的服务。我不确定这里的情况如何,但也许值得一试?

答案 3 :(得分:0)

在一个特别愚蠢的时刻,我也遇到了这个错误:

WCF异常:...此服务需要“匿名”身份验证,但未为承载此服务的IIS应用程序启用

我最终意识到我的web.config根本没有“system.web”中的“authentication”标签。难怪IIS抱怨身份验证问题!

解决问题就像添加:

一样简单
  <system.web>
    <authentication mode="Windows" />

愚蠢,我知道......但我希望这有帮助!