从.net 4.0升级到4.5.1会中断WCF

时间:2015-10-21 21:12:42

标签: wcf .net-4.5

我正在使用运行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。不。

0 个答案:

没有答案