【问题标题】:Only one callback at a time - WCF limitation?一次只有一个回调 - WCF 限制?
【发布时间】:2013-08-08 22:50:49
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: wcf wcf-callbacks


    【解决方案1】:

    你能尝试做一个异步代理吗?当你左键单击你的项目然后单击添加服务引用,然后检查生成异步操作。

    您将拥有一个使用事件回调返回的客户端。如果我没记错的话,每个回调都是在不同的线程中完成的。

    【讨论】:

    • 谢谢 Brice2Paris!由于我的回调 B 是一个状态检查器,它必须是实时的——异步回调不能满足我的需求。不过,出于排除故障的目的,我认为这是值得一试的。事实上,我已经尝试过让这两个回调 OneWay。虽然我知道 OneWay 调用与异步调用不同,但它们在某些方面是相似的。当我使用 OneWay 时,服务会继续发回调用,但仍然,回调都在某个地方排队 - 客户端在回调 A 返回之前不会收到它们,一旦 A 返回,它们都会立即涌入。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2022-01-27
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多