Web服务器如何使用SignalR同步调用客户端上的方法?这里的关键部分是服务器应该等待客户端在继续之前将数据发送回服务器吗?
基本上我希望像WCF服务请求一样处理客户端方法调用。调用客户端并等待返回数据。
答案 0 :(得分:5)
SignalR没有提供同步调用客户端方法的方法。
要实现与同步调用相同的功能,您可以将某种调用ID作为参数传递给客户端方法。然后,客户端可以在客户端方法完成时调用ClientMethodCompleted等服务器端方法及其调用ID。基本上你将实现自己的ACK。
如果你走这条路线,就必须跟踪客户端调用以及服务器上各自的ID。然后,您可以在服务器上的ClientMethodCompleted方法中执行同步调用之后要执行的任何逻辑。
如果只在一个客户端上调用该方法,这应该相当简单。如果要在多个客户端上调用该方法,则必须跟踪调用方法的客户端,以便在运行后续代码之前确保所有客户端都已确认调用。
如果您完全担心DOS攻击,我还会确保您定期清理存储未确认的客户端调用的数据结构,因为这将是一个明显的攻击媒介,可能允许恶意客户端爆炸内存消耗。 / p>