问题标签 [duplex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
11763 浏览

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

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

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

要求:

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

解决方案似乎是双工 netTcpBinding。基于此信息:

WCF 通过防火墙和 NAT

在 IIS 中保持连接打开

但是我还没有找到有效的代码示例。我尝试将 Microsoft 的 WCF 示例中的“Duplex”和“TcpActivation”示例组合在一起,但没有任何运气。请有人指点我可以工作的示例代码,或构建一个小型示例应用程序。非常感谢!

0 投票
2 回答
16777 浏览

wcf - 用于双工回调的 WSDualHttpBinding

将 WSDualHttpBinding 用于双工回调是否适用于实际场景?比如说,我有一个使用随机端口的 .NET 应用程序,该服务是否能够解析客户端的基地址和端口以进行回调?

0 投票
4 回答
5676 浏览

.net - 如果出现故障,如何自动重新建立双工通道?

我正在使用 WCF 在 .Net 3.5 中开发客户端/服务器应用程序。基本上,长时间运行的客户端服务(在多台机器上)通过 netTcpBinding 建立到服务器的双工连接。然后服务器使用客户端的回调合约来执行某些按需操作,客户端以异步方式响应(我认为这是相当标准的东西)。我将 DuplexClientBase 类子类化以处理大部分通信。

不幸的是,当任一端出现问题(例如网络故障、意外异常等)时,通道会出现故障/中止,并且所有后续操作都会失败。我通过创建一个 RecoveringClientBase 类解决了非双工通道中的这一限制,该类在客户端出现故障时自动获取并重试操作。

所以我的问题是,是否有确定双工通道何时出现故障的既定方法?我应该在哪里检查这个,在服务器或客户端上?如果做不到这一点,我必须有哪些选项来确保重新建立连接?

更新:我正在寻找一些特定于双工通道的建议,其中服务器可能会尝试使用出现故障的回调通道。因此,我需要在频道发生问题时立即重新连接/重新订阅的东西。目前,我正在收听频道的 Closing 事件,如果状态不是已关闭,则重新创建它。它有点工作,但感觉很hacky......

0 投票
3 回答
383 浏览

asp.net - ASP.NET 中是否存在共享会话的概念?

我正在开发一个由单个页面组成的 Web 应用程序 (ASP.NET) 游戏,在该页面上,会有一个类似于 Monopoly 的游戏板。我正在尝试确定最好的架构方法是什么。到目前为止,我确定的主要要求是:

  • 最多六个用户共享一个游戏状态对象。
  • 用户需要保持(相对)最新的游戏当前状态,即轮到谁了,活跃用户刚刚滚动了什么,其他用户有多少钱,等等。

我曾考虑将游戏状态保存在数据库中,但是当游戏状态对象(例如,在缓存中)可以保持最新时,继续更新数据库似乎有点过头了。例如,流程可能是这样的:

  1. 接收来自用户的数据请求。
  2. 在数据库中查找数据。从该数据创建对象。
  3. 验证用户是否有权根据游戏状态执行请求(即确保确实轮到他们或有足够的钱购买该属性)。
  4. 更新游戏对象。
  5. 将游戏对象写回数据库。
  6. 对每个请求重复。

考虑到单个服务器将服务多个并发游戏。

  1. 我曾考虑过使用 AJAX 向 ASP.NET 页面发出请求。
  2. 我曾考虑过使用 Silverlight 对 Web 服务使用 AJAX 请求。
  3. 我曾考虑在 Silverlight 中使用 WCF 双工通道。

我无法弄清楚最好的方法是什么。似乎都有自己的缺点。有没有人有这种事情的经验并愿意分享这些经验?如果我太模棱两可,请随时提出您自己的问题!谢谢。

更新:是否有人对如何根据我上面提到的三个选项实现与服务器的连接有任何建议?

0 投票
4 回答
3681 浏览

.net - WCF 双工服务和 TCP 端口耗尽

我正试图解决这个问题。我正在制作一个特定于业务的消息传递应用程序,它将通过 WCF(没有 vpns,整个网络)将 5000 到 10,000 台机器连接回我们的数据中心。它主要用于警报,我需要能够直接向特定客户端发送消息,而 WCF 允许我使用双工合同来完成所有这些工作,但是对于这么多客户端,它让我开始考虑最大化 TCP 端口空间65535 个端口。

我将假设所有入站连接都将通过我选择的任何端口进入,但返回客户端的出站连接将分别占用一个端口。我很好奇 WCF 端口共享服务是否可以解决此问题,或者它是否只有 65535 个端口到 IP 地址?那么,MSN Messenger 之类的如何处理这种情况。诚然,我可能永远达不到它,但至少我正在进入这个领域。

还是服务端的 WCF 双工合同在客户端期间保持端口打开以进行回调,还是释放它?

0 投票
2 回答
2318 浏览

vba - 我可以使用 VBA 以编程方式控制 HP 打印机驱动程序设置中的“旋转 180 度复选框”选项吗?

我正在尝试使用双面打印单元打开和关闭 HP Laserjet 打印机 (4200/ 4350) 的旋转 180 度设置。

企业需要“双面打印”,为了最大限度地控制我希望能够在打印时(通过打印宏)操作是否为每种不同类型的文档启用双面打印业务合作。

我可以控制纸盘分配、打印顺序以及打开和关闭双面打印。但是,无法弄清楚如何控制旋转选项(打开和关闭此选项)。

除毯子之外的任何可用解决方案 - 在打印服务器上为所有文档/用户启用此选项?

0 投票
1 回答
2151 浏览

wcf - 如何:响应式可用 Wcf 双工通信

我正在开发一个使用 WCF 在服务器和客户端之间进行通信的应用程序服务器具有不断变化的服务数量,以及一个主服务,客户端可以查询有关其他服务的信息,然后使用来自主服务的信息订阅他们想要的服务.

主服务向订阅的客户端发送通知,当子服务更改(添加、删除等)时,子服务也每隔几秒发送一次通知。

这听起来像是使用 WCF 回调通道的绝佳机会,但是,它们需要您使用会话。此外,在向客户端发送通知时,当任何客户端不光彩地断开连接时,服务会挂起,试图通知它。即使超时,一段时间后,在此期间没有其他客户端得到通知,这是不可接受的,因为客户端实际上是用于监控子服务后面的应用程序的 GUI。也不能为此使用 MSMQ,因为服务需要立即知道发送操作何时不成功。

我想出的解决方案是使用 http 绑定(发送不成功时立即知道)并在客户端上创建显式回调服务,但这需要我编写很多难看的基础设施代码。

所以,我的问题是:有没有更好的方法来使用 WCF 做到这一点。最好看的选择是回调合同,因为这使我无需手动管理回调服务,只要它在尝试发送到下一个客户端之前不能等待来自一个客户端的确认。

0 投票
1 回答
2063 浏览

wcf - 双工通信是否需要开放通道?

简短版本:当我在使用双工通信的客户端上使用 ChannelFactory 创建通道时,是否需要保持通道打开才能接收回调,或者我可以调用 ChannelFactory.Close()?

长版:我正在开发我的第一个 WCF 服务,并且我创建了自己的 ClientProxy 类,它实现了几个不同的服务并将其合并为一个。我使用 ChannelFactory 来创建每个通道,我在网上的一般阅读表明我应该缓存 ChannelFactory,但我应该只在需要时打开和关闭实际通道。

所以我调用 ChannelFactory.Open 来打开一个通道并执行一个双工操作(单向操作,后来调用回调)。我是否应该在请求操作后通过调用 ChannelFactory.Close 来关闭此频道,如果我这样做了,我还会收到回调吗?

基本测试似乎表明,如果我关闭连接,我将收到回调,但我只是想确定一下。另外,这种缓存 ChannelFactory 的方法是否正确?

谢谢

0 投票
2 回答
3955 浏览

wcf - WCF:是否可以在双工通道中使用流模式?

在 WCF 中,合约可以切换到流模式,以传输大消息。

在阅读和测试之后,在我看来,流模式不能用于双工通道(带有 OneWay 调用和回调接口的通道)。

是这样吗?双工和流媒体不能互相使用吗?或者有什么办法吗?

(我正在尝试将一个大文件上传到服务并使用回调报告进度)

0 投票
2 回答
1815 浏览

wpf - 响应式 WCF 客户端的双工回调或客户端线程

我有一项服务,其中特定功能的调用时间比其他服务要长,有时它们可​​能需要几秒钟才能返回。为了防止客户端的 UI 在发生这种情况时被阻止,首选的解决方案是:

  1. 使用双工通道并在接收到数据时简单地使用回调来更新 UI。
  2. 使用单独的线程调用服务,简单的使用request-reply操作,然后在返回数据时更新ui线程。

哪种解决方案更好,尤其是在互操作性受到青睐但并非绝对必要的情况下,并且在您看来,哪个解决方案的实施和维护更快(更清洁)?