WCF学习五(客户端和服务器时间不一致,导致通道建立失败的问题)
最近,经常有客户反应,前天还用的好好的系统,今天就不能用了。
考虑到系统近来没有做过改动和升级操作,所以从客户的机器环境入手解决,最后发现客户端的日期时间和服务端的日期时间有较大差异,将客户端机器修改成和服务端的日期时间一致后,系统恢复正常。
查了一下资料,原来WCF安全校验通道,在建立时,会将客户端和服务端的时间进行对比,如果差异超过一定范围,通道建立工作就会失败;这个时间范围默认为5分钟,可通过配置进行修改,具体方法可到网上搜索。
另外,客户端为什么用的好好的,突然就不行了,最后检查发现,客户端的机器在同步网络上的时间,这样,在客户端的机器同步了网络时间并且和服务端时间不一致时,系统就会出现异常。
好了,既然发现了问题,那么怎么解决呢,想到的办法有3个:
1.将WCF配置为非安全校验类型,这个风险较大,直接放弃
2.修改配置,将5分钟差异范围增大为30分钟,或更长,如下:
这个方法带来的问题是,我们必须使用customBinding绑定方式;并且,各个客户端的时间可能不一致,导致业务数据混乱
<customBinding>
<binding name="MyCustomBinding">
<transactionFlow />
<security authenticationMode="UserNameForSslNegotiated">
<secureConversationBootstrap>
<localClientSettings maxClockSkew="00:30:00" />
<localServiceSettings maxClockSkew="00:30:00" />
</secureConversationBootstrap>
<localClientSettings maxClockSkew="00:30:00" />
<localServiceSettings maxClockSkew="00:30:00" />
</security>
<textMessageEncoding>
<readerQuotas maxStringContentLength="500000"/>
</textMessageEncoding>
<httpTransport maxReceivedMessageSize="10485760" maxBufferPoolSize="524288" />
</binding>
</customBinding>
3.系统自动同步服务端的时间,这样就能解决客户端和服务端时间不一致的问题,并却还能保证各个客户端的时间一致;具体实现方法很多,这里不再赘述。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构