C# 问题与「;“死锁”;在WCF路由服务中

C# 问题与「;“死锁”;在WCF路由服务中,c#,wcf,iis,C#,Wcf,Iis,我试过几种不同的方法来做这件事,但我总是做得不够 简而言之,我需要做的是: 创建一个WCF服务,该服务充当客户端(台式pc)运行的诊断工具和“小部件”(也运行桌面窗口并具有internet连接)之间的路由器。由于这些“小部件”通常位于某种防火墙之后,我们决定通过tcp连接(我相信是端口800)使用IIS托管的WCF服务进行回调 小部件正在执行的操作的通知需要通过路由器异步向上发送到任何“连接”客户端 客户端需要能够同步调用小部件以获取诊断数据或命令它们执行任务 现在我在小部件上运行了一个wind

我试过几种不同的方法来做这件事,但我总是做得不够

简而言之,我需要做的是:

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

小部件正在执行的操作的通知需要通过路由器异步向上发送到任何“连接”客户端

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

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

我还有一个在台式机上运行的轻量级诊断应用程序

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

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

Ie:桌面调用服务器.getwidgetcolor(“widgetid”)服务调用
\u widgetlist[“widgetId”].getcolor()
并返回它

类似地,小部件监控程序在所有注册的客户端上调用服务器.notifywidgetcolorchange(“widgetid”)和服务调用

我遇到的问题是,如果一个wigdet在客户端调用该widget的同时调用服务器,那么这两个widget都会调用timeout

最初,我将服务器设置为单机版,并尝试将Concurrency模式更改为multiple或Reentrant,但这些似乎都不起作用

从概念上讲,我希望服务是每次呼叫,并以某种方式保持,即设备和客户端回叫,以便当呼叫进来时,服务器唤醒,取消回叫,发送消息,然后返回睡眠

尽管如此:

  • 这是否可能(保留回拨数据以便每台呼叫服务器可以回拨客户端)?如果不是,我可以为每个会话(对于客户端/小部件)提供服务,但通过其他方式在服务会话之间传递数据吗?共享内存?档案
  • 整体设计是否可行/推荐?我已经查看了WCF路由库,但这似乎没有达到我想要的效果,除非我读错了
  • 我是否应该使用其他技术更容易做到这一点
  • 谢谢

    -账单