问题标签 [wcf-callbacks]

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 回答
932 浏览

asp.net - 从 IIS 中托管的 ASP.NET Web 应用接收 WCF 回调服务

我已经在这个问题上工作了几天了。

问题有 3 个工作部分。我有一个 ASP.NET 站点、WCF IIS 托管服务和 WPF xbap 应用程序。

我想要做的是将变量从 ASP.NET 站点传递到 WPF xbap 应用程序。所以我设置了一个带有 wsDualHttpBinding 的 WCF 服务,并使用回调来通知 ASP.NET 和 xbap。

现在,当我在我们的服务器上的 IIS 6 中托管 WCF 服务并在本地运行 VS2012 iisexpress 和本地 xbap 中的 ASP.NET 托管时。它工作正常。但是,一旦我将 ASP.NET 站点发布到我们服务器上的 IIS 6,ASP.NET 应用程序就永远不会收到回调。两者都在应用程序池中。

是否有设置,或者我需要寻找什么让 ASP.NET 保持打开回调的侦听端口?XBAP 仍在接收回调,没问题。

服务配置如下:(请注意,由于目前的简单性,我已将缓冲区最大化以排除这种情况)

该服务具有客户端将订阅回调列表的方法。然后方法将通过列表递增以发送调用回调。

下面是 WCF 服务标头,我跳过了方法。

现在为 ASP.NET 客户端 web.config

然后是 XBAP 应用客户端 app.config

在这两个客户端中,我都使用了添加服务引用方法,将 WCF 添加到 ASP.NET 和 XBAP 项目中。我已经将两个客户端都设置为拥有代码,当然还可以处理每个回调的方法。

我知道它看起来有点啰嗦,但我想尽可能多地展示这个问题。我完全迷失了,为什么它在本地可以正常工作,但在 IIS 6 中托管时却不行。

0 投票
1 回答
315 浏览

performance - 监控等待传输的 TCP 消息队列

我有一个使用 NetTcp 的 WCF 客户端和服务器。服务器托管在 Windows 服务内的 ServiceHost 中。客户端订阅 WCF 服务并注册它的回调接口和它的 InstanceContext。回调接口有几个单向方法调用。我把它全开。

这一切都很好。但是,在我的测试中,我的 Windows 服务中有代码,该代码通过一个紧密的循环,尽可能快地通过单向方法调用之一将消息发送回客户端。我已经超出了 TCP 连接传递数据的能力,结果是消息排队。这是我所期望的。

问题是:服务器上是否有任何方法可以找出队列的备份情况,以便我可以根据实时吞吐量限制发送消息的速度?

0 投票
0 回答
920 浏览

wcf-callbacks - WCF:使用异步方法在回调(同一客户端)上调用服务方法

我正在做一些 WCF 实验,以了解我可以使用会话、回调和 TPL 运行多远。其中一个实验产生了奇怪的结果......服务是通过双向绑定 (NetTcpBinding) 实现的,并且通知是作为回调实现的。预期的行为应该是:

  1. 客户端以同步方式调用服务(Do)上的方法
  2. 服务以同步方式在客户端调用回调
  3. 客户端(在回调中)以异步方式调用服务上的第二个 a 方法

该服务需要一个会话,InstanceContext 是 PerSession,并发模式是 Single。在这种情况下,我知道,在回调的上下文中,我不能以同步方式调用服务的任何方法(在同一客户端上),因此代码可以是:

客户端回调接口的实现:

运行所有代码的主要方法:

在我的想法中,Notify 方法的实现中的行:

应该打破死锁但是......不,当调用 ReDoAsync 时会抛出一个异常,说“这个操作会死锁,因为在当前消息完成处理之前无法接收到回复......”。是的,亲爱的,我知道。事实上,我想以异步方式回调服务以绕过问题,但它不起作用。

但让我抓狂的是,稍微修改一下代码就能让它像魅力一样工作。而不是我尝试的 ReDoAsync 调用:

它有效!所以问题是:客户端方法的异步版本不应该进行与有效的调用相同或相似的调用吗?如果不是,那么客户端方法的异步版本到底是做什么的?

谢谢。

0 投票
1 回答
607 浏览

wcf - 负载平衡服务器中的 WCF 回调

我有一个使用 WCF 回调合同开发的聊天应用程序。这使用 netTcp 绑定进行客户端服务器通信。

客户端是一个 Windows 窗体应用程序,将在客户端机器(XP 或 Windows8 机器)上运行

这个 WCF 服务作为 Windows 服务托管在服务器机器中。我在服务中维护一个客户端会话列表,这将存储有关连接到服务器的每个客户端的详细信息,这个列表是静态变量。

工作流程是,每当客户端使用连接操作连接到服务器时,客户端详细信息将被添加到客户端会话列表中,服务器将使用此会话列表在需要时将消息发送回客户端。

在单服务器环境中一切正常,现在我想知道如何在负载平衡场景中处理这个问题,这意味着我有两台服务器机器,一次一台服务器将处于活动状态。如果服务器 1 发生故障,服务器 2将是活跃的。在这种情况下,如何管理我的客户端会话在两台服务器之间共享并照常工作而不打扰我的客户端?

0 投票
1 回答
102 浏览

wcf - WCF 回调和非 WCF 客户端

我想知道您是否可以将 WCF 回调与未在 .NET 中实现的客户端一起使用。谷歌无法回答我。

谢谢

0 投票
0 回答
145 浏览

wcf - WCF 回调是反模式吗?

据我了解,服务器非常擅长的一件事是管理大量传入连接,在这些连接资源可用时分配它们,然后在它们为传入请求提供服务后处理这些资源,以便它们可以提供更多服务要求。

通过允许客户端向服务器注册回调,客户端实质上从该服务器中获取了控制元素,因为它现在为自己分配了该服务器资源的一部分,持续了一些未指定的时间量,即在一定程度上超过服务器的控制权(当然,服务器可以随时关闭客户端以收回这些资源,但这一切都开始变得有点复杂)。

我越想越觉得 WCF 回调基本上是一种反模式,除非在特殊情况下,轮询应该是首选。

这是正确的,在这种情况下,那些例外情况是什么?

0 投票
2 回答
545 浏览

wcf - WCF 架构,因此我可以使用回调并针对 AD 进行身份验证

抱歉标题太长了。

这是关于 WCF 配置和安全性的。我有以下情况:

  • 一台服务器 (IIS)
  • N 个客户端(WPF 应用程序)
  • 用于在客户端和服务器之间进行通信的 Web 服务
  • 一切都在同一个局域网和同一个域中
  • 我需要一些双工通信,以便服务器可以通知所有客户端(无轮询,但使用 WCF 回调)
  • 用户凭据(登录名/密码)由活动目录管理
  • 用户身份验证是“每个用户”,而不是“每个 Windows 帐户”或“每个机器”

理想情况下,我希望有 2 种不同的服务:

一个需要 WCF 会话,以便我可以使用回调:

一个没有,所以我可以使用旧的方式来编写无状态、高效和可维护的服务:每个 WCF 调用都经过身份验证、授权,并在服务器端生成一个新的 Service 实现实例:

问题是,我们希望每个客户端都针对活动目录进行身份验证。因此,在客户端应用程序启动时,每个客户端都必须指定登录名、密码和域。问题是 AD 身份验证非常耗时:

我的第一个想法是使用该IService1服务(负责发送回调)作为身份验证服务:

所以在Login操作实现中,我们可以只检查一次用户登录/密码对 AD 的检查,并依赖 WCF 会话来处理来自客户端的下一个 WCF 请求。问题是,我不想IService1因为会话模式而对服务发出其他请求RequiredInstanceContextMode也就是说PerSession(是的,除了登录/注销/客户端通知之外,我想避免其他操作的丑陋的客户端代理单例模式) .

所以问题是:我如何构建和配置我的服务,所以:

  • 我不需要针对每个 WCF 请求向 AD 提出请求
  • 我有一些服务器回调
  • IService2对于回调服务(不是“实际”服务),我每个会话只有单例模式/会话所需/实例上下文

我在想wsHttpBindingforIService2netTcpBindingfor IService1。关于传输安全性(传输或消息)的选择和凭证类型(Windows、用户名、..?)的选择,我不确定。

任何帮助将不胜感激。

0 投票
1 回答
1057 浏览

c# - WCF RoutingService 如何将来自具有相同合同的两个不同 WCF 服务器的回调消息路由到客户端?

我的 WCF 服务器是这样工作的:您通过调用服务方法来订阅它们,比如 Subscribe()。他们通过回调通道将结果发回给您,例如 MessageReceived(string message)。

我现在的问题是我只从一个服务端点获取回调消息,而不是两者。事实上,仅通过调试,我就看到我的第二个服务甚至没有收到请求。有谁知道问题是什么?这是我的代码(请注意,我在 serviceAddresses 字符串中有两个 net.tcp 地址):

所以再一次......这就是我想要的:

这就是我得到的(即使我向路由器添加了第二个服务,它似乎甚至没有调用它的服务方法):

0 投票
0 回答
211 浏览

c# - wcf 回调方法未执行

1.我的服务在控制台应用程序上,我的客户端在 Windows 应用程序上。

2.服务有合同,我的客户有回调合同。

当客户端激活服务上的方法并且该方法激活客户端的回调但该方法未执行时,就会出现问题!最大的震惊是当客户端在控制台应用程序上时,回调是在相同的情况下执行的。

服务合同进出口:

客户端的回调合约 imp:

相同的代码适用于客户端控制台应用程序,但不适用于客户端 Windows 应用程序。

0 投票
1 回答
197 浏览

wcf - 一次只有一个回调 - WCF 限制?

我在这个问题上坚持了大约两个星期 - 所以有人可以告诉我,WCF 是否有限制,一次只能由一个回调对象处理一个回调?我已经尝试了几乎所有我能找到的解决这个问题的方法,但仍然无法获得任何地方。

我创建了一个非常简单的应用程序:客户端调用一个服务,然后服务同时向客户端发出两个回调:回调 A,需要很长时间才能返回;然后回调 B,即使 A 正在处理中,也会在循环中重复回调。问题是,当 A 正在处理时,B 永远不会通过。但是A一回来,B就会马上通关。

以下是我尝试过的事情: 1. 在客户端和服务上将 ConcurrencyMode 设置为 Multiple 或 Reentrant;2. 在客户端和服务上将 UseSynchronizationContext 设置为 False;3. 从客户端的工作线程开始服务调用;4. 在客户端的工作线程上创建代理(服务通道);5. 在服务上各自的工作线程上启动两个回调;6. 将两个回调都设为 Oneway。

这些都没有解决问题。我现在唯一能想到的是,这可能是 WCF 的限制。因此,如果有人可以对此有所了解,将不胜感激。