当服务中的事件被触发时,如何将响应从服务发送回客户端?

Posted

技术标签:

【中文标题】当服务中的事件被触发时,如何将响应从服务发送回客户端?【英文标题】:How to send response back from service to client when an event in service is fired? 【发布时间】:2019-03-29 22:22:08 【问题描述】:

我使用embarcadero rad studio 2010 和编程语言c++,我们正在通过WCF Service 与外部.net dll 通信。

通信是通过在embarcadero中导入WSDL来完成的,我们可以通过WSDL调用服务。

现在我想在服务中触发事件时将响应从服务发送回客户端。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用 WCF 服务中的回调函数来实现此目的。您必须随时调用主机中的回调函数向客户端发送任何数据。

请访问: https://docs.microsoft.com/tr-tr/dotnet/framework/wcf/feature-details/how-to-create-a-duplex-contract

【讨论】:

我用下面的方式做了同样的事情。 dotnetcurry.com/wcf/721/push-data-wcf-callback-service 但它对我不起作用,因为在那之后我无法托管该服务。 你的意思是你的服务停止响应了吗?如果是这样,您应该使用服务行为属性。将 SyncronizationContext 设置为 false,将 ConcurrencyMode 设置为 multi。否则,我认为您没有理由无法托管该服务。 嗨 Banis 我的服务已成功托管。它出现错误“标记为 IsOneWay=true 的操作不得声明输出参数、引用参数或返回值”。通过从函数中删除返回类型来修复它。现在的问题是如何在导入 wsdl 后在我的 c++ 中收到通知,或者我应该在我的 c++ 应用程序中为通知做些什么? 回调不应该返回任何东西,因为它们是一种方式。当您在客户端实现接口时,您还必须实现回调函数。当您在主机中调用任何回调函数时,您的回调函数将立即在您的客户端上调用。您的客户端还必须从回调接口继承。您可以在调用回调时简单地在客户端中触发一个事件,然后将值传递给事件处理程序,该处理程序将显示您想要的通知。 感谢@Bans,但是我的界面在 WSDL 中不可见,无法实现。

以上是关于当服务中的事件被触发时,如何将响应从服务发送回客户端?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 RESTful 服务发送安全令牌?

Javascript - 当服务器发送大响应时,WebSocket 客户端未收到 onmessage 事件

命名管道异步

在服务器事件上向客户端发送信息

我如何更新从WebChat组件触发的对话更新事件的channelData?

带有django和python socket io的事件