我知道 WSDualHttpBinding、NetTcpBinding 和 NetPeerTcpBinding 绑定(bind)都支持双工/回调服务操作。
我在互联网上找不到任何人询问 ajax 调用是否支持双工。也许我无法找到任何相关内容的原因是因为我完全误解了一些关键的 WCF 概念,这使得这个问题成为最愚蠢的问题......
我知道 webHttpBinding 绑定(bind)以及 <enableWebScript/>
生成客户端代理对象所需的 js。
这是否不可能,因为双工服务需要托管回调服务,而客户端无法做到这一点? (如果这是有道理的..)
我的应用程序分层如下:
1. WebSite1 - ajax 调用 WebSite1.MyClientService。
2. WebSite1.MyClientService - 引用 MyServiceProxies DLL 的 WCF 自托管服务。
3. MyServiceProxies DLL - 继承自 ClientBase 的自定义代理(用于代替“添加服务引用”自动生成的代理)。这只是将实际的服务调用委托(delegate)给 [MyService : IMyService at WinService WCF Host EXE] 处的 base.Channel.OperationName()。
4. WinService WCF Host EXE - 它作为 Windows 服务作为单例运行,允许多线程调用。来自 WebSite1 的调用查询该单例保存的内存中值。该单例最终将通过单独的数据层将内存中保存的所有数据提交到数据库。
WinService 配置为通过 net.tcp 使用双工调用。 WinService 将与 WebSite1 IIS 应用程序在同一台计算机上运行。
最佳答案
I can't find anywhere on the internet anyone even asking if duplex is somehow supported for ajax calls. Maybe the reason for my inability to find anything on this is because I am completely misunderstanding some key WCF concept that makes the question the dumbest question there is...
也许并不愚蠢,因为我认为你不理解的是 AJAX,而不是 WCF。
在 AJAX 中拥有双工合约并没有真正的意义。双工合约必须期望服务器随时调用合约操作。例如,它不像发布/订阅或请求响应,在消息开始到达之前,客户端必须执行操作。通过双工合约,消息可以随时到达。
谁会听他们的?不是浏览器。如果浏览器要对来自远程计算机的未经请求的消息使用react,然后运行代码 - 嗯,这听起来很像病毒的定义,不是吗?
我认为在相当长的一段时间内你都不会在 JavaScript 中找到对双工合约的支持。
关于ajax - WCF 和 ASP.NET : Duplex Support using AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1066336/