我正在使用运行iis 7.5的Windows Server 2008 r2。我的WCF服务在框架4.0上运行。运行集成管道的32位应用程序。
服务位于启用了Annonymous和Windows身份验证的虚拟目录中。我的配置如下:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="MyWebservice.MyService" behaviorConfiguration="MyWebservice.MyServiceBehavior">
<!-- Service Endpoints -->
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding" contract="MyWebservice.IMyService" />
<endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="MyBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyWebservice.MyServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
使用框架4.0一切正常。升级到框架4.5.1后,当我从域上的帐户连接WCF测试客户端时,我得到以下异常:
HTTP请求未经授权使用客户端身份验证方案&#39; Negotiate&#39;。从服务器收到的身份验证标头是“Negotiate,NTLM&#39;
”
由于所有内容都已正确配置且在.net 4.0中正常运行,因此此错误无济于事。我尝试卸载wcf服务,重建它并定位框架4.5.1(一切都在我的开发机器上运行),然后用4.5.1目标构建重新部署新的msi。最令人抓狂的事情是对服务的第一个请求始终有效,之后的每个请求都返回上述错误。那里有什么想法吗?
其他信息
即使安装了所有更新的全新安装的Windows 2008 r2,并且只安装了框架4.5.1和安装了必需的IIS组件(除了安装了病毒扫描程序之外没有其他应用程序),这个错误仍然会出现。
编辑#2
还根据方案#1添加了SPN
http://mingkunsnotes.blogspot.ca/2010/01/iis-windows-integrated-authentication.html
没有运气。
编辑#3
我的网站运行在80以外的其他端口,比如888.我尝试了以下spns:
setspn -A HTTP/myServerName myServerName
setspn -A HTTP/myServerName.company.com myServerName
如果不起作用,我删除了这些SPN并尝试:
setspn -A HTTP/myServerName:888 myServerName
setspn -A HTTP/myServerName.company.com:888 myServerName
这也不起作用。还尝试启用和禁用内核模式身份验证,并使Negotiate-Kerberos成为唯一的提供者。什么都行不通。
编辑#4
尝试设置useAppPoolCredentials = true。不。