WCF(.NET 4.0)+ IIS 7 + Windows身份验证错误 - “服务需要Windows身份验证,但它未启用IIS应用程序”

时间:2011-03-10 20:22:31

标签: wcf iis iis-7 iis-6

我们有一个简单的WCF(在.NET 4.0上)服务,该服务使用Windows身份验证,并且在IIS 7身份验证功能上启用了相同的功能。这在两台服务器上使用相同的设置和相同的配置,但在其中一台服务器上返回错误Security settings for this service require Windows Authentication but it is not enabled for the IIS application that hosts this service.我在网上检查了所有可能的内容,并尝试了所有选项,例如禁用其他身份验证机制等。似乎没有工作。任何人都可以指出可能是什么问题。 两个服务器上相同的settigns在第三台服务器上完全正常运行它有问题。

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="ABCDbConnection" value="Data Source=xxx; Initial Catalog=sss;Integrated Security=True"/>
    <add key="MetadataDbConnection" value="Data Source=xxx; Initial Catalog=sss;Integrated Security=True"/>
    <add key="UsageEnabled" value="True"/>
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <protocolMapping>
      <add scheme="http" binding="basicHttpBinding" bindingConfiguration="WindowsBasicHttpBinding"/>
    </protocolMapping>
    <behaviors>
<serviceBehaviors>
    <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
    </behavior>
</serviceBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="WindowsBasicHttpBinding">
      <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

2 个答案:

答案 0 :(得分:2)

此线程中的任何解决方案是否都有效?

http://social.msdn.microsoft.com/Forums/en/wcf/thread/021babc6-2009-4ed9-81f4-ac48cc300c94

blog post开始,它提到了KB article

  

如果返回此错误并且Windows   身份验证已启用   IIS,这意味着存在问题   支持的网络身份验证   网站的网站计划   服务安装在。最多   可能的原因是它已配置   仅适用于NTLM。我们想要指定NTLM   和谈判。

答案 1 :(得分:2)

您是否尝试过使用

通过web.config启用Windows身份验证
<system.web>
       ....
    <authentication mode="Windows" /> 
       .....
</system.web>

有可能一台机器从父配置文件继承此设置,但不能在抛出错误的机器上继承此设置。

您还可以验证是否已禁用匿名身份验证,如下图所示

enter image description here