问题标签 [durable-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 投票
2 回答
1303 浏览

wcf - WCF双工通道,解耦请求和响应

我正在考虑一个项目,在该项目中我将被要求使用各种称为“异步”模式、“双工”模式或 SOAP Web 服务的“回调”模式。在这种模式下,服务的调用者在 SOAP 标头中提供一个“回复”地址,并且服务不会在 HTTP 响应中返回调用的输出,而是创建一个到该“回复”的单独 HTTP 连接" 地址并向其发布响应消息。这通常在 WCF 中使用 CompositeDuplexBinding 实现,如下所示:

这导致每次调用不是一个,而是两个 HTTP 连接:一个从客户端到服务,然后一个从服务返回到客户端。从服务实现的角度来看,没有任何变化,你有一个实现接口方法的方法,你接受请求并返回响应。太棒了,这几乎是我需要的。

在我的情况下,请求和响应可以分开几分钟到几天。我需要一种方法来分离请求和响应,并“存储”状态(消息、响应 URI 等等),直到我有足够的信息在以后响应(或者在某些情况下甚至永远不会响应)。

我对让我的方法基本上一次“暂停”长达几天以及所需的愚蠢超时值(如果它们甚至被认为是有效的),我并不感到非常兴奋,但我不知道该怎么做把这样的系统放在一起。

为了完全清楚,我正在实现一组标准机构提供的标准,因此我没有灵活性来更改 SOAP 消息语义或更改协议实现。这种交互正是在 WS-Addressing 中实现ReplyTo 标头时的意图。

你会怎么做?也许 Workflow Foundation 支持这种事情?

0 投票
1 回答
910 浏览

tcp - 使用 TCP 的持久双工,没有任何 KeepAlive() 方法

我需要为事件通知实现一个持久的 TCP 双工连接。客户端注册事件,服务器将此事件通知所有订阅者。

问题是,TCP 连接在 10 分钟后关闭。我知道可靠的会话。关闭和不活动超时。

我需要的是在客户端和服务器之间实现某种“始终打开的连接”。客户端一旦发现连接丢失就会重新连接。但是在与 TCP 连接时可能很难注意到某些连接丢失。

我能够发明某种具有长接收和不活动超时的解决方案。如果服务器仍然在线并使用某种 KeepAlive() 方法连接,客户端会在短时间内“脉冲检查”服务器。

我想在我的服务合同上没有 KeepAlive() 方法的情况下获得解决方案。

有任何想法吗?

//米罗

0 投票
0 回答
236 浏览

wcf - 尽快初始化 WCF 双工 nettcp 通道

在我的客户端/服务器应用程序中,我希望单个双工 WCF 通道可用于与其服务器进行通信 - 一种后台连接,对于客户端应用程序运行来说不是绝对必要的,但对于向服务器报告状态是可取的. 我分别在和中有一个Ping()呼叫和Echo()回调。IServerContractIClientContract

class ServerProxy : System.ServiceModel.DuplexClientBase<IServerContract>使用传递方法来实现base.InnerChannel.

如果我var proxy = new ServerProxy(...)在我的客户端中创建,我可以开始调用proxy.Ping(),WCF 将自动打开第一次调用的连接并在之后立即执行操作调用。但是,由于通道初始化和身份验证,第一次调用总是需要大约 10 秒。(我正在使用 Windows 身份验证、基于消息的安全性、EncryptAndSign。)后续调用更快。

我相信这 10 秒是不可避免的,但通常在客户端第一次调用服务器之前有一段时间可能会发生这种初始化。因此,我没有等待 的自动打开功能DuplexClientBase,而是通过致电 来提前打开频道proxy.InnerDuplexChannel.Open()。(proxy.Open() 抛出一个异常,这种间接性似乎避免了它。)

不幸的是,验证客户端到服务器通道不会同时验证服务器到客户端回调通道。相反,服务器对客户端的第一次调用也需要大约 10 秒。由于我使用的是 netTcp 绑定,因此对此我感到很惊讶,但我认为这是可以预料的。

如何也可以抢先打开回调通道?

我可以要求客户端调用一些Login()方法,但我不认为 WCF 应该严格要求在用户代码知道连接的客户端之前进行操作!

提示(?):我想这段代码必须放在 WCF 管道/生命周期中的某个位置,服务器有机会对客户端连接的事件执行自定义操作(并且在传输任何操作消息之前)。到目前为止,我一直没有找到这个集成点。

0 投票
3 回答
3330 浏览

.net - 基于 .NET 的推送通知服务

我正在寻找基于 .net 的可扩展推送通知解决方案。

设想:

客户端和服务器都将在 .NET 中。要求是,将有大约 60-100 个客户端连接到单个服务器,并且服务器应该能够为每个客户端每分钟发送 4000-5000 个通知。每个通知也会有一个小的有效负载。

有任何想法吗?