【问题标题】: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调用服务。

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

【问题讨论】:

    标签: c# c++ wcf wsdl rad-studio


    【解决方案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 中不可见,无法实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多