问题标签 [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 回答
321 浏览

c# - 为不同的用户创建单独的处理程序 - WCF 聊天

我正在关注这篇精彩的文章来剖析和理解使用 WCF 进行的聊天。逻辑是,当用户加入聊天时,会为该特定用户创建事件处理程序并将其存储在字典中。

因此,为服务中的多个用户存储了多个处理程序。

我的问题是这个——

仅在事件处理程序的帮助下发送消息时,服务如何识别目标用户?我不了解为用户存储的事件处理程序的唯一性。如何

调用客户端中为特定用户实现双工客户端合约接口的函数?是什么让他们联系在一起?会议?

注意:我知道如果不阅读那篇文章,这可能很难理解。我已尽力以通用的方式询问它。

问候

NLV

0 投票
1 回答
175 浏览

wcf - 在每次 silverlight 投票时在服务器上运行的自定义代码。(轮询双工)

当 silverlight 客户端每次轮询服务器以保持连接处于活动状态时,是否可以运行自定义代码。我的应用程序是可从 silverlight3 获得的彗星式轮询双工通信的实现。我发现它在每次投票时都会发送以下 Soap 消息。

0 投票
1 回答
234 浏览

wcf - 如何调试与多个客户端连接的 WCF 服务 - .NET

我编写了一个带有异步回调客户端的双工合同的 WCF 服务。当多个客户端连接时我遇到了一些问题,我不知道如何调试服务。对此有何见解?

谢谢你。

NLV

0 投票
4 回答
1810 浏览

c# - 从异步 WCF 双工调用更新 asp.net 页面 - 对象范围 - ASP.NET

我有以下疑问。我有一个页面“MyPage”,并且我在页面类中声明了几个字典对象。

我的疑问是

  1. 如果我将字典声明为私有非静态对象,我将无法在该页面类中的函数中使用它(该对象为空)
  2. 但是,如果我将字典声明为静态的,我就可以跨函数跨对象。但是该对象对于现在打开页面的所有用户来说是否相同(猜测每个用户将拥有一个页面实例反过来又具有页面类的实例,并且类的静态变量在所有实例中都是不变的类)

我的理解对吗?如何声明该对象在页面类中的所有函数中都可用,并且对于页面的每个实例(用户)都是唯一的。

更新1

Okie,我发现页面类中字典对象的初始化是在不同的线程中完成的(WCF Duplex 回调)。但是在主页线程中,字典对象仍然保持为空(未初始化)。有任何想法吗?

更新2

编组 - 有用吗?

更新3

回复约翰-

感谢您的回复。我现在面临的问题是将数据从客户端的 WCF 回调类(将在单独的线程中调用)传递到 asp.net 页面。那么我该怎么做呢?视图状态可以帮助我跨请求持久化数据。但是,当服务器调用回调通知更改时,我应该如何将更改(数据)传递给 UI 线程(asp.net 页面)?

0 投票
2 回答
9960 浏览

c# - “OperationContext.Current.GetCallbackChannel”实际上是做什么的?

OperationContext.Current.GetCallbackChannel 实际上做了什么?它如何识别每个客户?

我的 WCF 服务遇到问题。如果两个以上的用户连接到服务,我从服务发送给客户端的所有“有趣的更改”都将发送给第二个加入的用户。

例如,如果 A、B、C、D 加入服务,如果我通过回调将更改发送到 C 和 D,它将发送到 B。

有任何想法吗?

详情

客户端:ASP.NET Web 应用程序

绑定:netTCPBinding

更新1

好的,我找到了问题的原因。我在 IIS 中托管了 asp.net 客户端。例如客户端的 URL 是http://url1。如果我在不同的机器上打开页面的多个实例并加入服务,回调通道总是指向页面的第一个实例(我从不同的机器打开站点)。但是,如果我在 IIS 中的不同站点下托管 asp.net 客户端,则回调通道是唯一的。对此有什么想法吗?

0 投票
2 回答
1112 浏览

wcf - 如何处理 WCF 双工超时?

过去两天我一直在网上搜索,但绝不能让我的 WCF Duplex 服务正常工作。我创建了一个可以从 skydrive 下载的演示项目:

WCFDuplexDemo.zip

为了尽量减少可能的错误原因,我决定在回调处理程序中只返回一个短字符串,因为这样就不会超过最大消息大小限制或任何内容。通常,我的 WCF 服务需要一些时间(+15 分钟)来计算结果,然后将其返回给客户端。为了模拟这一点,我在 DoWork() 中让执行线程休眠了 12 分钟。

我得到的异常总是提到可能的问题receiveTimeout,应该增加它以防止出现问题。但是,receiveTimeout(以及我知道的任何其他超时)设置为三个小时。

还有一件事:我使用的是 .NET Framework 3.5 SP1,并且在使用 WsDUalHttpBinding 而不是 netTcpBinding 时也会出现问题。

0 投票
1 回答
4292 浏览

wcf - 双工 WCF 服务 - 直接调用和回调不使用相同的通道

我的目标是在没有打开传入端口的情况下访问防火墙后面的 WCF 服务。我选择的解决方案是在公共端托管双工 WCF 服务,该服务具有与不涉及防火墙时使用的相同合同作为回调。

如果我使用 netTcpBinding 它可以工作,但由于我需要流式通信,所以我必须使用自定义绑定。

一切正常,直到我提高防火墙。此时,直接调用(从防火墙后面)工作正常,但回调不能(防火墙阻止它)。

问题是为什么?他们不应该使用与预定义的 netTcpBinding 相同的频道吗?

这是我在 app.config 中的频道堆栈:

0 投票
5 回答
11688 浏览

wcf - WCF 双工回调示例失败

为了磨练一些示例服务以用作我们内部场景的参考,我创建了这个 WCF 双工通道示例,汇集了多年来发现的几个示例。

双工部分不起作用,我希望我们能一起解决。我讨厌发布这么多代码,但我觉得我已经将它缩减到尽可能短的 WCF,同时整合了我希望社区审查的所有部分。这里可能有一些非常糟糕的想法,我并不是说它是正确的,这就是我到目前为止所得到的。

有三个部分。通道、服务器和客户端。三个项目,这里是三个代码文件。没有 XML 配置,一切都被编码进去。然后是代码输出。

Channel.proj / Channel.cs

Server.proj / Server.cs,引用Channel、System.Runtime.Serialization、System.ServiceModel

Client.proj / Client.cs,引用 Channel、System.Runtime.Serialization、System.ServiceModel

整理输出:

正如安德鲁所指出的,问题并不是那么不言自明。此“整理输出”不是所需的输出。相反,我希望服务器正在运行,Ping 和注册成功,然后每隔 5 秒,服务器会“发送”HELLO?(#m)“同步”并且客户端将立即转换并返回,服务器将接收并打印出来。

相反,ping 工作,但第一次尝试回调故障,在重新连接时到达客户端但不返回服务器,并且一切都断开连接。

我看到的唯一例外与通道先前发生故障并因此无法使用有关,但尚未发现导致通道达到该状态的实际故障。

[OperationalBehavior(IsOneWay= true)]我已经多次使用类似的代码。奇怪的是,这个看似更常见的案例却让我如此悲痛。

我不明白的在服务器端捕获的异常是:
System.TimeoutException:“发送到 schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous 的此请求操作未在配置的范围内收到回复超时 (00:00:00)。分配给此操作的时间可能是较长超时的一部分。这可能是因为服务仍在处理操作或因为服务无法发送回复消息。请考虑增加操作超时(通过将通道/代理转换为 IContextChannel 并设置 OperationTimeout 属性)并确保服务能够连接到客户端。”

0 投票
4 回答
16370 浏览

wcf - 求WCF双工“TwoWay”订阅+回调示例

再次更新赏金,因为我真的需要知道如何让它发挥作用,或者明确回答为什么它不会。

我在这里添加了对该问题的另一种解释。

让双向 (IsOneWay = false) WCF 客户端-服务器在 .Net 3/3.5 中工作真是费尽心思。

客户端成功注册服务后,服务的周期性 Announcement() 回调注册的客户端。现在是客户端或服务器挂起,直到服务器的 SendTimeout(调整为 2 秒)过去。那么服务器端出现超时异常如下。只有这样,客户端用户代码才会立即接收方法调用并尝试返回一个值。到那时,客户端的套接字被中止并且 WCF 的东西失败了。

在我看来,客户端上的某些东西正在将其本地 WCF 队列从处理中挂起,直到套接字超时,但还不足以取消本地方法调用。但是,如果可以相信以下异常,则服务器正在尝试将操作发送到http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous(不合适!)并且正在超时。也许该 URI 只是远程连接客户端的“名称”,因为 WCF 知道出于错误消息的目的引用它,它似乎只是意味着它无法加载 URI。我不知道是服务器先失败还是客户端先失败。

我已经尝试添加 WCF 跟踪,但我没有获得更多信息。

类似的示例代码是here,但它一定是太多无法消化。我已经尝试过该代码的变体。

0 投票
1 回答
73 浏览

.net - WCF服务接口交换

我想避免 WCF 中的双工 Chanel 并在客户端创建回调服务,将客户端地址传递给服务器,以便服务器可以随时调用客户端。(可能不同的绑定等)

如何将回调接口传递给客户端?(我仍然希望服务器管理这个接口,避免把它放在单独的 DLL 中。有什么想法吗?谢谢