小编Sir*_*ire的帖子

46
推荐指数
1
解决办法
3万
查看次数

WCF通过防火墙推送到客户端?

另请参阅WCF服务器如何通知WCF客户端有关更改的信息?(更好的解决方案然后简单的轮询,例如Coment或长轮询)

我需要通过客户端防火墙使用WCF推送技术.这一定是一个常见的问题,而且我知道它在理论上是有效的(参见下面的链接),但是我没能使它工作,而且我找不到能够演示它的代码示例.

要求:

  • WCF
  • 客户端通过tcp端口80(netTcpBinding)连接到服务器.
  • 服务器以不规则的间隔(1分钟到几个小时)推送信息.
  • 用户不必配置防火墙,服务器推送必须通过所有入站端口关闭的防火墙.为此,需要在同一连接上使用TCP双工,双重绑定不起作用,因为必须在客户端防火墙上打开端口.
  • 客户端定期(可能每15分钟)向服务器发送心跳,因此服务器知道客户端仍处于活动状态.
  • 服务器是带有WAS的IIS7.

解决方案似乎是双工netTcpBinding.根据这些信息:

WCF通过防火墙和NAT

在IIS中保持连接打开

但我还没有找到一个有效的代码示例..我尝试将微软的WCF样本中的"Duplex"和"TcpActivation"样本结合起来,没有任何运气.请有人指出我可以使用的示例代码,或构建一个小样本应用程序.非常感谢!

.net wcf firewall push duplex

9
推荐指数
1
解决办法
1万
查看次数

C# ConcurrentQueue - 当 Enqueue 发生时引发事件?

我有一个托管在 Windows 服务中的 WCF 服务。

WCF 服务注入了一个ConcurrentQueue<SomeClass>.

Windows 服务(承载 WCF 服务)也注入了ConcurrentQueue<SomeClass>.

Windows 服务启动 WCF 服务,并生成一个工作线程。

工作线程将 ( Enqueue) 对象推SomeClass送到ConccurrentQueue

我希望以某种方式在对象入ConcurrentQueue队时触发 WCF 服务,以便它可以出队(以及可能在队列中的任何其他对象),并向所有连接的客户端发送消息。

.

两个问题:

  1. 如何在注入的 ConccurentQueue 的“入队”方法上使 WCF 服务“挂钩”,以便当对象被推入队列时 - WCF 服务会对此做些什么?

  2. 如果我确实设法以某种方式挂钩了“入队”事件,并且现在 Windows 服务中的工作线程已将两个对象排入队列 - 这意味着它还会两次“触发”WCF 服务的“入队挂钩” - 那些两个触发事件发生在不同的线程中?我需要以某种方式确保 WCF 服务按顺序从队列中提取对象。我不想突然看到每个 Enqueue 操作 - WCF 服务在单独的线程中触发并将对象拉出......

我希望我的问题足够清楚......

.

[更新]

在与 Chris 交谈后,我得出的结论是,最好的方法是将工作线程与 WCF 服务分开,并使工作线程作为客户端调用 WCF 服务。这意味着我不必摆弄队列。

wcf triggers concurrent-collections

4
推荐指数
1
解决办法
6195
查看次数