【发布时间】:2010-02-17 22:21:01
【问题描述】:
这就是我想要完成的具体目标:
使用 .Net 3.5,我有一个 Windows 服务,我在其中运行了一个 WCF 服务。我有一个客户端,它从 WCF 服务(Net.Tcp 绑定)请求一个文件,然后由 WCF 服务将其复制到指定位置,然后客户端可以在该位置对其进行编辑/修改。 WCF 服务正在 InstanceContextMode.PerSession 模式下运行。
在编辑文件时,我希望将文件锁定在托管 WCF 服务的机器上。返回文件后,我希望再次解锁文件。我不相信我可以在 WCF 服务中锁定文件,因为一旦文件被复制,服务会话就会结束,并且我认为此时不会保留对文件的锁定。
一个解决方案(我对此并不感兴趣)是在 Windows 服务中创建一个线程,该线程可以维护一个文件列表并根据需要锁定/解锁这些文件。当然,多线程访问必须同步访问这个列表。此解决方案需要不断轮询列表以检测添加的新文件和删除的文件。
在我看来,一种首选方法是在需要锁定/解锁时从 WCF 服务中触发事件。与持续轮询相反。然而,锁定/解锁任务的执行需要在不同的线程上进行(例如,在 Windows 服务的上下文中运行的线程)。
我们使用 Windows 窗体执行此操作,我们可以从后台线程调用要在 UI 消息传递线程上执行的方法。有没有办法在另一个线程(不是 UI 消息传递线程)上“调用”一个方法?
关于如何最好地解决这个问题的任何建议?
【问题讨论】:
标签: wcf multithreading events event-handling