全部,
我有一个使用服务帐户(VM,Windows 2003 SP2)在 IIS 下托管的 WCF Web 服务(我们称为服务“B”)。该服务公开了一个使用默认值的 WSHttpBinding 的端点,除了 maxReceivedMessageSize、maxBufferPoolSize、maxBufferSize 和一些已增加的超时。
Web 服务已使用 Visual Studio 负载测试框架对大约 800 个并发用户进行了负载测试,并成功通过了所有测试,没有引发异常。单元测试中的代理是从配置中创建的。
有一个 sharepoint 应用程序使用 Office Sharepoint Server Search 服务来调用 Web 服务“A”和“B”。应用程序将从服务“A”获取数据以创建将发送到服务“B”的请求。来自服务“B”的响应被编入索引以供搜索。代理是使用 ChannelFactory 以编程方式创建的。
当服务“A”花费不到 10 分钟时,对服务“B”的调用成功。但是,当服务“A”需要更多时间(约 20 分钟)时,对服务“B”的调用会引发以下异常:
异常消息:从另一方收到不安全或不正确安全的故障。有关故障代码和详细信息,请参见内部 FaultException 内部异常消息:无法处理消息。这很可能是因为操作 'namespace/OperationName' 不正确,或者因为消息包含无效或过期的安全上下文令牌,或者因为绑定之间存在不匹配。如果服务由于不活动而中止通道,则安全上下文令牌将无效。为了防止服务过早中止空闲会话,请增加服务端点绑定的接收超时。
绑定设置相同,客户端服务器和 Web 服务服务器的时间与 Windows 时间服务同步,时区相同。
当我查看托管 Web 服务“B”的服务器时,我可以看到正在记录以下安全错误:
资料来源:安全
类别:登录/注销
事件编号:537
用户 NT AUTHORITY\SYSTEM
登录失败:
原因:登录时出错
登录类型:3
登录过程:Kerberos
身份验证包:Kerberos
状态码:0xC000006D
子状态码:0xC0000133
在网上看了一些博客后,状态码表示STATUS_LOGON_FAILURE,子状态码表示STATUS_TIME_DIFFERENCE_AT_DC。但我已经检查了服务器和客户端时钟,它们是同步的。
我还注意到安全令牌似乎缓存在客户端服务器的某个位置,因为它们有另一个进程使用相同的服务帐户调用 Web 服务“B”并在第一次调用时成功获取数据。然后他们开始更新办公室共享点服务器搜索服务索引的过程,但它失败了。然后,如果他们再次调用第一个进程,它也会失败。
有没有人遇到过此类问题或有任何想法?
问候,
——达米安