我有一个用C#编写的WCF服务器,并使用netTCPBinding与客户端通信。现在我希望我的非托管c ++客户端连接到同一个WCF服务器。 这可能吗? C ++客户端可以具有与C#客户端相同的功能吗?如果有可能,我该怎么办?我读了一些关于在c ++ Client和C#Server之间建立桥接dll的内容,但是教程已经很老了,并且Visual Studio 2013 Express中缺少所有模板。
答案 0 :(得分:4)
查看Windows WEB服务API:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd430435%28v=vs.85%29.aspx - 主页
http://msdn.microsoft.com/en-us/library/windows/desktop/ee354195%28v=vs.85%29.aspx - 代码示例
本文介绍如何在本机C ++代码和C#WCF之间建立连接:
http://www.codeproject.com/Articles/38535/A-first-look-at-the-Windows-Web-Services-API
请注意,托管WCF与本机客户端之间的互操作性受到限制。托管WCF公开了一些功能,例如异常编组,回调接口,托管对象序列化,本机WWS API不支持这些功能。您需要使用简单的二进制通信协议,并在两侧手动进行二进制序列化(如有必要)。单向(异步)WCF调用可以在WWS API中实现为void
方法。而不是回调接口使用两侧的服务器/客户端对。我建议您使用简单的高级WWS服务模型而不是通道层,这非常复杂。
根据我的个人经验:在测试WWS-WCF互操作性之后,我决定纯粹在WWS SDK中实现通信级别,并通过PInvoke为C#代码公开此功能。只有当我需要与现有的无法更改的WCF服务进行通信时,我才会使用WWS-WCF互操作性。
另一种方法:向本机C ++项目添加.NET支持。现在您可以通过传统的.NET方式使用WCF。例如,您可以添加对与WCF一起使用的C#类库的引用,并从C ++代码中调用它。