问题"死锁"在WCF路由服务中

时间:2014-07-22 21:05:53

标签: c# wcf iis

我已经尝试了几种不同的方法来做到这一点,但我一直在做空。

简而言之,这就是我需要做的事情:

创建一个WCF服务,充当客户端(桌面PC)运行诊断工具和“小部件”(也运行桌面窗口并具有互联网连接)之间的路由器。由于这些“小部件”通常位于某种防火墙之后,我们决定通过tcp连接(端口800,我相信)使用IIS托管的WCF服务进行回调。

小部件正在做什么的通知需要通过路由器异步向上发送到任何“连接”客户端。

客户端需要能够同步调用小部件来获取诊断数据或命令它们执行任务。

现在我在小部件上运行了一个Windows服务,它监视它的状态,并提供了一个指向内部程序的链接来获取数据。

我还在台式机上运行轻量级诊断应用程序。

我已经为状态推送和数据提取创建了一个回调接口,小部件监控程序和桌面程序都可以实现。

我的第一次尝试是让路由器服务保留已注册设备和客户端的列表,并在它们之间传递消息。

即:桌面呼叫server.getwidgetcolor("widgetid");和服务呼叫_widgetlist["widgetId"].getcolor()并将其返回。

同样,小部件监控程序在所有已注册的客户端server.notifywidgetcolorchange("widgetid")上调用_widgetlist["widgetid"].clients.Notifiycolorchange()和服务调用

我遇到的问题是,如果wigdet在客户端调用该小部件的同时调用服务器,则两次调用都会超时。

我最初将服务器设置为单例,并且已将播放模式更改为多个或重入,但这些似乎不起作用。

从概念上讲,我希望服务能够按照每次调用而持续存在,设备和客户端回调,以便在呼叫进入时,服务器唤醒,对呼叫进行解密,发送消息,然后回去睡觉。

尽管如此:

  1. 是否可以^^(保持回叫数据以便每个呼叫服务器可以回调客户端)?如果没有,我可以为每个会话(对于客户端/小部件)创建服务,但是通过其他方式在服务会话之间传递数据吗?共享内存?文件?
  2. 是否可以/推荐全面设计?我查看了WCF路由库,但这似乎没有做我想要的,除非我读错了?
  3. 我应该使用的其他技术可以更轻松地实现吗?
  4. 谢谢,

    - 比尔

0 个答案:

没有答案