我正在使用WCF连接至一个使用"TransportWithMessageCredential"安全模式的SOAP端点。
WCF客户端/服务器使用SCT(安全上下文令牌)来维护安全连接,在一般情况下工作正常。
但是,在一段不活动时间后,SCT将过期,并且下一个方法调用将导致MessageSecurityException:
从对方接收到未经保护或保护不正确的故障。请参见内部FaultException以获取故障代码和详细信息。
内部异常:
无法处理该消息。这很可能是因为操作'http://tempuri.org/IMyService/MyMethod'不正确,或者是因为消息包含无效或过期的安全上下文令牌,或者是因为绑定之间存在不匹配。如果服务因不活动而中止通道,则安全上下文令牌将无效。要防止服务过早地中止空闲会话,请增加服务端点绑定上的接收超时。
在后续的调用中,当我看到CommunicationState处于故障状态时,我会更新连接。但在进行方法调用之前,我找不到预先检查SCT是否过期的方法。