WCF有时会返回401

时间:2016-12-29 14:14:00

标签: asp.net web-services wcf authentication soap

由于我们将一些网站从Windows Server 2008 R2迁移到Windows Server 2012,因此一个网站有时会从同一服务器上调用的WCF服务中获取错误401。这可能会在失败前1-2天到1小时内工作。这似乎只发生一次,之后它再次工作了X个时间。

问题似乎只与本网站隔离,在迁移后没有问题的另一台服务器上有一些其他服务器调用此WCF服务。

两个站点都位于同一台服务器上,但位于不同的站点和appPools上。

IIS日志:

[DATE1] 12:03:40 [IP1] POST ServiceName.asmx - [PORT1]- [IP2] - - 401 0 0 0
[DATE1] 12:03:40 [IP1] POST ServiceName.asmx - [PORT1] - [IP2] - - 401 1 3221225581 0

网站出错:

  

ServiceName / ProcessData - DataAccess FunctionName-消息:HTTP请求未经授权,具有客户端身份验证方案' Negotiate'。从服务器收到的身份验证标题是“Negotiate,NTLM'”。 StackTrace:

配置:

该网站使用域帐户访问使用身份验证模式窗口的WCF服务。

网站绑定

<binding name="ReportSummaryFacadeSoap" 
         closeTimeout="00:01:00" openTimeout="00:01:00" 
         receiveTimeout="00:10:00" sendTimeout="00:01:00" 
         allowCookies="false" bypassProxyOnLocal="false" 
         hostNameComparisonMode="StrongWildcard" 
         maxBufferSize="65536" maxBufferPoolSize="524288" 
         maxReceivedMessageSize="65536" 
         messageEncoding="Text" textEncoding="utf-8" 
         transferMode="Buffered" useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" 
             maxArrayLength="16384" maxBytesPerRead="4096" 
             maxNameTableCharCount="16384"/>          
      <security mode="TransportCredentialOnly">            
          <transport clientCredentialType="Windows" 
                     proxyCredentialType="None" realm=""/>
          <message clientCredentialType="UserName" 
                   algorithmSuite="Default"/>
      </security>
</binding>

我希望有人能够阐明这一点。

亲切的问候

帕特里克

1 个答案:

答案 0 :(得分:0)

这要归功于Hyper-V负载平衡,这是不正确配置的。如果会话持久性的配置有点低,那么当它开始调用第一台机器并稍后调用几次时它会在负载均衡中切换到第二台机器,这导致401响应。