问题标签 [duplex-channel]
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.
.net - WCF - 如果在客户端连接时关闭,则在 CloseTimeout 持续时间内关闭双工 ServiceHost 块
我有一个托管三个不同双工 WCF 通道的 Windows 服务。客户端可以连接以通过他们的回调合约将更新发送给他们。本质上存在三个 pub-sub 频道。
当客户端连接时,此服务需要很长时间才能反弹。调用ServiceHost.Close
需要 10 秒才能返回(因此服务需要 30 多秒才能停止。)结果我closeTimeout
的 in config 是 10 秒。更改此值表明这是问题的原因。
我该怎么做才能及时关闭频道?我不喜欢某些事情正在超时的想法。我可以打电话Abort
,但似乎必须有更好的方法。我以前没有在非双工频道上看到过这种情况,所以假设这与它是双工的有关。
理想情况下,将立即通知客户端通道出现故障,以便用户可以立即看到更新已停止。
wcf - WCF Duplex Channel: Check if callback channel is still available
I have the following problem. I'm writing chat software. The client/server mechanism is based on DualHttpBinding of WCF. This means that if a user sends a message, all clients that are in the room where the message has been sent, are notified by the server.
I want to ensure, that if a client's application crashes (whyever), the client object is removed from the rooms' lists.
Is there a possibility to check the callback channel's state before calling a callback operation? The problem is, that if i call an operation on a client which is not anymore connected (because of an unexpected crash), the service will hang.
How can i check if a client is still listening? BTW, the operations called on the client are all declared OneWay and the ConcurrencyMode is set to "Multiple".
Thank you all!
Greets,
Simon
.net - WCF服务接口交换
我想避免 WCF 中的双工 Chanel 并在客户端创建回调服务,将客户端地址传递给服务器,以便服务器可以随时调用客户端。(可能不同的绑定等)
如何将回调接口传递给客户端?(我仍然希望服务器管理这个接口,避免把它放在单独的 DLL 中。有什么想法吗?谢谢
wcf - WCF:如何诊断故障通道?
我正在为我的实验室进行更改,希望能帮助诊断我们看到的一些奇怪的通道故障怪异。有一个测试应用程序使用 DuplexChannelFactory 连接到几个 Windows 服务,由于某种原因,这个测试应用程序上的通道似乎有很多错误。我计划在那里实现一些重试逻辑,但如果能弄清楚它们究竟为什么会出错,那就太好了。
我知道通道工厂和代理对象都实现了很多接口,我已经使用反射器爬过其中的一些,但是我没有找到任何像我要找的东西。有没有办法在这些对象出现故障后查询这些对象,以获取有关导致故障的原因的一些信息?
编辑:配置非常基本——绑定只是默认构造的 NetTcpBinding,服务实现具有[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Reentrant)]
,并且服务合同中的任何操作都没有特殊属性。但是,我更多地询问有关诊断通道故障的一般技术,而不是诊断这种特定情况。我不希望配置细节对此产生太大影响。如果有的话,配置详细信息将是所述诊断返回的内容,对吗?
wpf - wsDualHttpBinding 无法使用 WPF 客户端在网络外部工作
我试图在 WPF 和 WCF 之间实现 DuplexCommunication,在内部测试时通信运行良好,在网络中,当我们在外部发布后尝试访问这个外部网络时,我们能够通过 Web 浏览器访问服务,但是当我们尝试打开连接时,WPF 客户端给出了错误。下面是服务器端和客户端的配置。服务器:
客户:
我尝试在服务器端提供带有 dns 值的“baseAddresses”和“identity”,也尝试在客户端提供 clientBaseAddress,但它仍然无法在网络之外工作。
尝试从 WPF 应用程序打开双工连接时总是出现超时错误:错误:“打开操作未在分配的 00:00:09.4911018 超时内完成。分配给此操作的时间可能是较长超时的一部分。”
我认为配置部分有问题,但不确定是什么,对此非常感谢。
谢谢。
c# - 访问托管服务的对象
我正在使用带有 C# 的 WCF 4。我正在使用InstanceContextMode设置为Single。实现我的合同的类的实例是使用构造函数创建的,该构造函数接受承载服务的对象的引用。在创建和托管服务主机时传递服务对象。
服务实现代码:
服务主机代码:
我现在面临的问题是,我们需要客户端和服务器之间的双工通信。对于双工连接,我们需要将InstanceContextMode设置为PerSession。
我的问题是:
我可以以某种方式为 InstanceContextMode 使用多个值吗(我认为这是不可能的)?
ServiceImpl 对象是否有其他方法可以获取托管它的对象的引用?
有什么我可以做不同的事情来解决这个问题吗?
谢谢。
wcf - Https和流媒体?通过 http 的 IDuplexSessionChannel - 默认情况下打开客户端端口?
我有一些我认为对于 WCF 专家来说很容易回答的小问题,但我并不完全了解。我希望它们不是很明显:
- 传输安全(http 和 ssl)是否与流结合使用?如果不是,我如何以安全的方式将大数据传输到客户端?
- 如果我没有完全偏离轨道,IDuplexSessionChannel 也需要客户端打开一个端口,以便服务可以通过回调联系客户端。这是否也会影响通过 http 进行通信的 IDuplexSessionChannel?默认情况下应该打开 80 端口,不是吗?
wcf - 如何在 WCF 自定义通道中更改 DuplexSessionChannel (tcpTransport) 中的消息?
我在自定义频道上实现了 IDuplexSessionChannel,因为我使用了 tcpTransport。在该自定义通道中,我缓存服务调用响应(客户端缓存)。但它有错误。在 IRequestChannel 中它工作正常。如何在 TryMessage 方法中更改消息。我的代码:
CacheManager 工作。我得到了响应缓存。但是 tryReceive 再次运行,当我查看消息时。消息已关闭。我该如何解决
wcf - 如何在回调方向扩展 WCF?
我可以使用行为将 IParameterInspector 附加到 ClientRuntime 中的每个操作,也可以附加到服务端 DispatchRuntime 中的每个操作。但似乎这只适用于从客户端到服务。
如上所述,我还希望能够在从服务到客户端的回调中附加一个 IParameterInspector,但我找不到任何可扩展点来执行此操作。
有任何想法吗?
c# - 从 DMZ 到 Intranet 的双工通道 WCF
我们在域内运行双通道服务。我们在端口 20120 上有一个 TCP 绑定,在端口 20121 上有一个 HTTP 绑定。
在 DMZ (web) 中,我们要访问这个 WCF 服务。防火墙似乎是从 web 到服务打开的。使用 telnet,我可以访问这两个端口,还可以从 Web 浏览器浏览 WSDL。现在,当我尝试从 Web 应用程序连接到服务时(它使用 TcpBinding,如果不重新部署新的二进制文件,我无法轻易将其更改为 HttpBinding,这是一个痛苦的过程),我得到一个异常。
我们的测试环境都是内网,所以没有DMZ。那里一切正常。
服务本身作为域用户运行,并且客户端服务行为已配置其 userPrincipal(如 username@domain.ext)。这需要访问 domain.exe 的域控制器吗?
我还在服务端启用了 WCF 日志记录,但那里没有任何反应。一切都很平静,就像那里什么都没发生一样。是否还有其他地方我错过了检查连接断开的原因。
EDIT1:我写了一个小测试程序,建立 wcf 连接并调用 2 个方法。这在与服务相同的机器上以及从 dmz 网络上也可以正常工作。绑定设置相同。(确认)。我从 dmz 网络机器上的普通控制台以本地用户身份运行测试。任何提示?