问题标签 [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 投票
1 回答
1746 浏览

c# - 双工回调始终是匿名的

我写了一个 WCF 双工服务和客户端。在我尝试在客户端实现中调用 .Demand() 之前,一切正常。该服务似乎匿名调用回调方法。我想我错过了如何正确配置服务。

用于创建 ServiceHost 的代码;

用于创建客户端的代码;

客户端实现:

如何配置以便 ServiceHost 使用 Windows 凭据正确调用回调?

0 投票
1 回答
9086 浏览

wcf - 通过 WCF 双工通道长期运行的回调合同 - 替代设计模式?

我有一个 Windows 服务,可以将雷达枪的速度读数记录到数据库中。此外,我将该服务设为 WCF 服务器。我有一个订阅服务的表单和一个 CF 客户端,只要有满足特定标准的读数就会被回调。

这原则上有效,但一段时间后通道超时。长时间运行的连接似乎存在一些基本问题(请参阅 http://blogs.msdn.com/drnick/archive/2007/11/05/custom-transport-retry-logic.aspx)和双工 HTTP 回调可能不是正确的解决方案。还有其他方法可以使用 WCF 实现发布/订阅模式吗?

编辑:即使有 2 小时的超时,频道最终也会受到影响。我收到此错误:

无法完成“SignalSpeedData”操作,因为会话通道等待接收消息时超时。要增加超时,请在配置文件中的绑定上设置 receiveTimeout 属性,或直接在 Binding 上设置 ReceiveTimeout 属性。

这发生在最后一次成功通话后 15 分钟。我想知道是否可以为每次通话重新建立一个新的会话,而不是保持会话打开。

0 投票
2 回答
5847 浏览

serial-port - 半双工串行连接的含义是什么?

使用半双工串行连接与全双工串行连接有何不同?如果双方同时尝试发送数据会发生什么?您最终会收到损坏的数据吗?流量控制对您有帮助吗?

0 投票
1 回答
1542 浏览

c# - WCF:使用 Duplex 跨同一 WCF 服务的多个实例进行通知

在应用程序 (WPF) 的多个实例之间共享 WCF 服务(类)的单个实例SoapClient的最佳方法是什么?

我需要这样做,因为我需要启用带有回调的双工通信,所以我需要向服务“注册应用程序”,以便使用该应用程序的其他用户在新用户登录时会收到通知。


顺便说一句,以下内容被删除,因为我已经确认要使通知起作用,注册者需要注册到同一个 wcf 服务实例......因此现在我需要一种方法来共享这个实例

我目前正在开发一个应用程序,每当有人登录该应用程序时,我需要某种方式来通知当前正在使用该应用程序的用户。

我尝试过使用 WCF Duplex 的东西,但我无法让它工作......我认为它背后的原因是因为通知和订阅需要发生在 WCF 服务的同一个实例上。

但是由于这个应用程序将部署在多个用户的电脑上,我不能只共享这个 wcf 服务的一个实例是吗?(或者我可以吗?)

有没有办法为所有用户共享一个 wcf 服务的公共实例 (the SoapClient)?还是我以错误的方式解决这个问题?

目前我正在通过一个公共属性通过一个类库访问 WCF 服务,该公共属性在每次访问它时都会发送一个新的 wcf 服务实例,我认为这就是为什么通知不适用于多个实例的原因应用程序。


以下是客户端应用程序(wpf 应用程序)用于访问服务方法的方法(在类库中):

然后,在主应用程序窗口中,我从上述this作为 instanceContext 参数传入的重载方法中获取一个新实例,并Open等待通知,但是当另一个用户从应用程序的另一个实例登录时,我永远不会收到通知。

这就是我在服务登录方法中通知注册商(摘录)的方式:

0 投票
2 回答
15750 浏览

c# - 使用 net tcp 的 WCF 双工服务:“需要流安全性...”

我正在编写一项服务,允许用户注册并在事件发生时接收通知。我正在尝试使用 netTcpBinding 执行此操作,但即使在我的本地计算机上运行时也会不断出现错误。

当我尝试发送通知时,我超时,收到此错误:

http://www.w3.org/2005/08/addressing/anonymous需要流安全,但没有协商安全上下文。这可能是由于远程端点在其绑定中缺少 StreamSecurityBindingElement 造成的。

为了进行测试,我将服务托管在控制台中,它正在为我打开,我可以看到 WSDL 并在其上运行 svcutil。但是,当我运行客户端并尝试发送通知时,就会出现上述错误。

主机 App.config:

这是客户端 App.config:

我省略了很多注册码,因为我现在只是想让通知正常工作。

计划是在不属于客户域(他们的设置)的 2003 Server 中的 Windows 服务中托管它,并且客户端计算机将在客户的域中。

编辑:

我已将绑定添加到主机的 App.config:

这仍然错误,与相同的 Steam Security is required 错误消息。在新解决方案中尝试此应用程序的一小部分。

0 投票
2 回答
885 浏览

ipc - 回复:共享内存和信号量

IPC 机制是使用共享内存和信号量来同步单工(如管道)还是双工(如消息队列)?

0 投票
0 回答
750 浏览

silverlight - Silverlight PollingDuplexHttpBinding 和跨域问题

我创建了一个 silverlight 组件和一个 WCF 服务,两者都使用 PollingDuplexHttpBinding 进行通信以启用推送和拉取功能。

在我们的域中完美运行,但是,我们域外的主机完全不调用公开的 web 服务。

clientaccesspolicy 文件是可用的并且可以从根目录下载,我什至添加了一个跨域文件。因此,从服务器 A 到服务器 B(A 和 B 在同一个域中)我看到来自 silverlight 客户端(在 FireBug 中)的发布请求,在 A 和 C 之间(其中 C 是外部服务器),没有调用,甚至没有调用客户端访问策略文件。

PollingDuplexHttpBinding 和跨域仍然可行(找不到任何关于此的内容)还是我可以查看其他内容?

0 投票
2 回答
1659 浏览

wcf - WCF 嵌套回调

背景:我正在尝试将由 ADO 1.0 DBServerSyncProvider 的同步服务触发的服务器端ApplyChangeFailed事件转发给客户端。Sync Services冲突解决的所有代码示例都没有使用WCF,当客户端直接连接到服务器数据库时,不存在这个问题。但是,我的 DBServerSyncProvider 由无头 WCF 服务包装,并且我无法向用户显示包含有问题数据的对话框以供查看。

因此,显而易见的解决方案似乎是将 Sync Services 生成的 HTTP WCF 服务转换为 TCP,使其成为双工连接,并在接收SyncConflict对象并设置事件的 Action 属性的客户端上定义一个回调处理程序。

当我这样做时,我得到了一个运行时错误(在尝试回调之前):

System.InvalidOperationException:此操作将死锁,因为在当前消息完成处理之前无法接收到回复。如果要允许无序消息处理,请在 CallbackBehaviorAttribute 上指定 Reentrant 或 Multiple 的 ConcurrencyMode。

所以我按照消息的建议做了,并用 Multiple 属性修饰了服务和回调行为。然后运行时错误消失了,但调用导致“死锁”并且永远不会返回。我该怎么做才能解决这个问题?在原始服务调用返回之前,是否不可能有一个回调客户端的 WCF 服务?

编辑:我认为可能是对问题的解释,但我仍然不确定正确的解决方案应该是什么。

0 投票
5 回答
9883 浏览

c# - WCF ServiceHost.Close() 延迟

我有一个简单的 WCF 双工 TCP 服务,我试图以编程方式停止它。如果我没有任何连接的用户,ServiceHost.Close() 非常快,但如果我什至有一个连接的用户,我发现 Close() 函数需要相当长的时间,有时 > 30 秒。这是通常的行为吗?

另一方面, Abort() 几乎是瞬时的,我很想改用它。

0 投票
1 回答
2064 浏览

ajax - WCF 和 ASP.NET:使用 AJAX 的双工支持

我知道 WSDualHttpBinding、NetTcpBinding 和 NetPeerTcpBinding 绑定都支持双工/回调服务操作。

我在互联网上找不到任何人甚至询问是否以某种方式支持 ajax 调用双工。也许我无法在这方面找到任何东西的原因是因为我完全误解了一些关键的 WCF 概念,这使得这个问题成为最愚蠢的问题......

我知道 webHttpBinding 绑定以及<enableWebScript/>生成代理对象客户端所需的 js。

这是不可能的,因为双工服务需要托管该回调服务并且无法在客户端执行该操作吗?(如果这有意义..)

我的应用程序分层如下:
1. WebSite1 - 对 WebSite1.MyClientService 的 ajax 调用。
2. WebSite1.MyClientService - 引用 MyServiceProxies DLL 的 WCF 自托管服务。
3. MyServiceProxies DLL - 从 ClientBase 继承的自定义代理(用于代替“添加服务引用”自动生成的代理)。这只是将实际服务调用委托给 [MyService : IMyService at WinService WCF Host EXE] 处的 base.Channel.OperationName()。
4. WinService WCF Host EXE - 作为一个windows服务运行,作为一个单例,允许多线程调用。来自 WebSite1 的调用查询此单例所持有的内存值。这个单例最终将通过单独的数据层将所有保存在内存中的数据提交到数据库。

WinService 配置为通过 net.tcp 使用双工调用。WinService 将在与 WebSite1 IIS 应用程序相同的机器上运行。