我有一个传输大文件的WCF服务。
目前我正在使用Singleton服务,其中包含来自我的类的实例列表,用于保存状态并响应客户端对传输进度的请求等等。
instanced类本身在需要时为每次传输处理新线程。
添加转移请求和请求进度的客户端可以同时断开连接并随机重新连接请求。
此外,有几个不同的客户可能希望请求正在进行的所有转移的进度。
一切都很好,但我确信有更好的方法可以做到这一点吗?
以某种方式在SQL中存储状态? 我正在进行存储状态并以某种方式重新连接到同一个实例?那么如何从所有实例中获取数据?
我希望你理解我这个相当长的问题:)
答案 0 :(得分:2)
如果只有一个yor WCF服务实例,那么Yor解决方案会很有效。
当您使用loadballancing实例化多个实例时,该方法将无效 在这种情况下,您需要保持状态是所有实例共有的位置。它可以是SQL,状态服务器,可以保持状态的另一个WCF服务等等。
<强>更新强>:
您需要为每个文件传输任务生成ID。然后Singletone可以将id转换为传输的实例(让我们称之为Executor)
当客户想要获得进展或取消转移时,它会请求Singletone并提供任务ID
Singletone应该使用任务ID来解析实际的Executor和forvard客户端对正确的Executor的请求。
结果,您将能够根据需要实例化尽可能多的执行程序。客户端不应该担心Executor处理文件的确切位置。永远知道客户应该知道的是任务ID。