【问题标题】:Can WCF be used with/from native (C++) applications?WCF 可以与本机 (C++) 应用程序一起使用吗?
【发布时间】:2010-12-08 18:43:51
【问题描述】:

问题说的是什么。您如何从没有 .NET 的本机应用程序与 WCF“世界”进行交互?

编辑:抱歉,我应该更具体一些,因为 WCF 似乎涵盖了如此广泛的范围。我在考虑这样一种情况,您有几个应用程序使用 WCF/TCP 通信作为它们的通信/IPC 机制,而您现在需要集成一个没有 .NET 可用的本机 (C++) 应用程序。

【问题讨论】:

  • 你到底是什么意思?是否要调用 WCF 服务,托管一个,制作一个?什么样的?
  • 与它的“接口”是什么意思?例如,通过其他 C++ API,您可能会为 WCF 应用程序(使用 SOAP)构建客户端(或服务器),但如果没有托管 C++,可能无法直接使用 MS 库。

标签: .net c++ wcf


【解决方案1】:

WCF 与协议无关 - 差不多。但是您需要在与 WCF 通信的方式中考虑这一点:

只要你可以发送对方可以使用的消息,你应该没问题。

1) 命名管道绑定:在.NET之外使用是正当的,难以使用

2) TCP 绑定:在.NET 之外使用是正当的,难以使用

3) basicHttp 绑定:它是在 .NET 之外最容易实现的绑定之一

4) wsHttp 绑定:只要你有一个可以创建和使用 ws* 消息的原生库就可以了,但有点困难。

5) REST API:它确实是最简单的,我推荐这个如果你可以控制向你提供什么样的服务。

【讨论】:

  • 您好 Aliostad,当您需要在同一台计算机上进行进程间通信并且您有需要将数据发送到 WCF REST 服务的 Java 或 C++ 客户端进程时,是否可以使用选项号 5 (REST)?
【解决方案2】:

是的,可以让非托管 C++ 应用程序使用 WCF 与其他应用程序进行通信。在我的特殊情况下,我修改了旧版 MFC 可执行文件以使用 WCF 与 Windows 服务进行通信。

基本思想是使用 C# 在 .NET 程序集中编写 WCF 客户端代码,因为这样做更容易。然后,使用 C++ dll 在非托管 C++ 代码和 .NET 程序集之间架起桥梁。

我有一些关于如何做到这一点的分步说明here。

【讨论】:

  • 第 1 次:感谢您的提醒以及指向您(很棒!)描述的链接。第二:不幸的是,我在您链接到的 Q 中遇到了与用户 galets 相同的问题,即我希望避免将 CLR 拉入我原本 100% 的本机进程中。
  • 明白。三分。首先,与 CLR 的交互仅限于 C# 程序集(显然)和 C++ 'bridge' dll。该解决方案不会将 CLR 直接依赖于您的本机 C++ 应用程序和 dll。其次,从 Windows 7 开始,.NET 3.5 SP1 作为操作系统组件包含在内并默认安装。第三,对于旧版本的 Windows,您始终可以提供所需的 .NET 安装程序。
  • 我可能应该补充一点,我并不关心依赖本身,而是关心让 CLR VM 在我的本机进程中运行纯粹是为了促进通信。
【解决方案3】:

您可以在 Windows 7 和 Windows 2008 R2 或更高版本的操作系统上使用 Windows Web Services API 从本机代码使用 WCF 服务(无需桥接到托管代码)。 WWSAPI 是 SOAP 的本机代码实现,它支持 WS-* 和 .NET-* 系列协议,并且内存开销最小。

WWSAPI 包含一个方便的WsUtil tool,用于从服务描述文档为接口生成 C 存根代码。您可以使用服务模型元数据工具SvcUtil documented here 生成 WSDL 服务描述文档。

还有helpful MSDN blog 文章演示了如何使用 WWSAPI 从本机代码调用 WCF 服务。

如果您使用 C++11 进行编码并且您的 WCF 服务公开了 REST 接口,那么有一个更现代的替代 API(也由 Microsoft 提供)用于使用称为 Casablanca 的 REST 服务,记录在 MSDN here 上,并托管在 @ 987654326@.

【讨论】:

    【解决方案4】:

    不使用标准SOAP 协议的“WCF 世界”是问题所在。 NetTcpBinding 和 NetNamedPipeBinding 需要某种非托管到托管的桥,如所述。所以答案显然不是“是”。这取决于 WFC 服务提供的绑定。

    【讨论】:

      【解决方案5】:

      我不知道你在说什么“WCF 世界”。 WCF 可用于实现 SOAP Web 服务,可以使用旧的 SOAP 1.1 格式,也可以使用现代的 WS-Security。所以,你的问题变成了:我可以从 C++ 调用一个 SOAP Web 服务吗,答案显然是“是”。

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 2017-12-06
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多