C# 等待服务回调时会话超时时通知客户端

C# 等待服务回调时会话超时时通知客户端,c#,.net,wcf,soa,C#,.net,Wcf,Soa,我有一个面向服务的桌面应用程序 我正在为某个特定操作调用某个服务,然后等待该服务的回调。如果服务操作的完成时间超过会话超时值,则服务会出现异常。但是客户端一直在等待回调 是否有一种方法可以通知客户端会话已超时?除非我遗漏了什么,否则我想您可能希望捕获异常并相应地工作(例如返回带有无效会话消息的回调?) 此外,您可以在回调异步等待上实现超时,因此即使会话过期、网络断开或启示录破坏网络通信,您的客户端也可以返回控制并通知用户 请重新登录并重试,验证您的网络并检查是否有任何天数结束的迹象 编辑:根据反

我有一个面向服务的桌面应用程序

我正在为某个特定操作调用某个服务,然后等待该服务的回调。如果服务操作的完成时间超过会话超时值,则服务会出现异常。但是客户端一直在等待回调


是否有一种方法可以通知客户端会话已超时?

除非我遗漏了什么,否则我想您可能希望捕获异常并相应地工作(例如返回带有无效会话消息的回调?)

此外,您可以在回调异步等待上实现超时,因此即使会话过期、网络断开或启示录破坏网络通信,您的客户端也可以返回控制并通知用户

请重新登录并重试,验证您的网络并检查是否有任何天数结束的迹象

编辑:根据反馈的要求,这里更详细地介绍了我对您应该拥有的服务器-客户端交互的想法

您面临的主要问题是发生了一些事件(会话过期或意外故障),使客户机无法知道服务器永远不会应答。您不能计划灾难性的失败,但您确实可以计划无效会话、无效身份验证、无效数据等。在这种情况下,服务器可能会更加冗长,特别是如果您使用的是瘦客户机模型,它在服务器ping返回之前什么都不做

但是,在没有交流的情况下,如何处理真正的失败呢?如果你可以考虑通信错误可能发生(我真的建议你这样做),你应该让你的客户智能足够至少处理通信错误。这样做很重要,因为首先,通信不是那么可靠(发生错误配置、硬件故障等)。其次,当这样的事情发生时,您正冒着功能崩溃的风险,或者提供了一个真正糟糕的用户体验。并不是说错误是一种良好的用户体验,而是更具响应性的应用程序


TL;灾难恢复:向客户端提供反馈,必要时向用户提供反馈。重要的是双方都知道会发生什么。

为什么要使用会话?如果您使用wsDualHttpBinding进行回调,那么您需要使用会话,但是如果您使用netTcpBinding,那么您不需要会话。那么就没有时间了

将其作为更新活动会话的一种方式不是更容易实现吗?很抱歉,我不知怎么错过了粘贴其余部分,以及实施活动会话。您可以使用某种形式的后台计时器,每N分钟更新一次用户。我不是投反对票的人,但这个答案似乎没有提供任何有用的见解,对我来说毫无意义。感谢您的反馈(非常感谢)。我想我一定是遗漏了什么,我看不出为什么从服务器到客户端的反馈是一个好方法编辑:我想我知道你的意思,我会努力给出一个更具解释性的答案。谢谢。好吧,看看我是否答对了。假设你有几个客户和一项服务。每个客户机都要求一个服务做一些(可能足够长的)工作。然后,每个客户都希望在这项工作完成后得到反馈。服务器需要通知客户端并提供一些结果。如果操作在服务器上超时,客户端可能不会(我不确定这一点,但看起来是这样)收到任何通知,因为服务器上的通道已关闭,但客户端一直在等待。OP希望在这种情况下通知客户端。根据您的评论,我没有考虑服务器端发生超时的情况。我认为这里的超时定义是用户的会话,它将在服务器和客户端之间共享。对于这种情况,我的第二个建议仍然适用,那就是客户端要足够智能,能够处理失败时的长时间等待。是的,我认为可以通过配置文件进行处理,但客户端可能会发生一些事件(如关闭/故障)。但我不太确定如何做到这一点。令人不安的是,有些人懒得解释为什么他们投了反对票。