Silverlight 客户端可以与 C++ 服务器通信吗?

Posted

技术标签:

【中文标题】Silverlight 客户端可以与 C++ 服务器通信吗?【英文标题】:Can a Silverlight client talk to a C++ server? 【发布时间】:2009-12-11 10:20:45 【问题描述】:

我们公司希望将我们当前的用户界面转换为网络客户端。我们正在考虑为此使用 Microsoft 的 Silverlight,但它需要与我们的旧版 C++ 服务器应用程序(本机 C++,而不是 C++/CLI)进行通信。我想知道手动编写这样的 IPC 库是否可行,否则是否有现成的 IPC 协议可用作 C++ 和 Silverlight 库。

更新:我强调使用的编程语言,因为它们决定了可以使用哪些库。例如,为 .NET 的中间语言编写的库不能被原生 C++ 应用程序使用。

【问题讨论】:

服务器编写的语言与它有什么关系? @Neil:因为编程语言规定了可用的库。 如果 Silverlight 支持 IPC 机制,我不明白为什么不。 【参考方案1】:

您当然可以这样做——现在在我的桌面上,我在 Visual Studio 的一个实例中运行 C++ 服务器应用程序,在第二个实例中运行 Silverlight 应用程序,并且 Silverlight 应用程序正在与 C++ 服务器通信插座。但是,有几个重要的警告:

(1) Silverlight 只会与一小部分端口 (4502-4532) 通信,因此您可能需要修改服务器(或插入某种代理)以允许 Silverlight 与其通信;

(2) 服务器必须在端口 943 上提供socket policy file;和

(3) 您不能轻易使用传统的高级访问机制,如 RPC 或其他。如果 C++ 服务器需要特定的协议,您将不得不自己在 Silverlight/C# 中编写所有内容。这不一定是火箭科学,但如果您不熟悉套接字编程,则有一个学习曲线。预计会花费大量时间处理 byte[] 数组、Buffer.BlockCopy()、BitConverter.GetBytes() 等等。

另一种方法是使用 WCF 服务器包装 C++ 服务器,然后从 Silverlight 调用 WCF 服务器。 WCF 通常比套接字慢很多,但在 Silverlight 中调用也容易得多。

【讨论】:

【参考方案2】:

您可以使用TCP sockets 或WebServices 连接到您的应用程序。不过,您可能需要为此编写一个网关应用程序(将基于套接字的客户端与您的 C++ 服务器应用程序连接起来的应用程序)。

【讨论】:

【参考方案3】:

您至少有 3 种方法可以做到这一点:

    直接套接字通信 - 周围有很多 C++ 库(Winsock、wxWidgets) Web 服务 - 与 Java/C# 相比,C++ 中的 Web 服务不是那么漂亮,但也有像 gSoap 这样的工具 只需使用普通的旧 HTTP 请求。从 Silverlight 获取/发布(简单),然后发回您在 C++ 中手动构建的一些 XML 或 JSON 数据(或 XAML)(或者也必然有 C++ 库)

【讨论】:

以上是关于Silverlight 客户端可以与 C++ 服务器通信吗?的主要内容,如果未能解决你的问题,请参考以下文章

从 Silverlight 访问 Rally SOAP 服务

在 Silverlight 3 中请求客户端访问策略文件

SilverLight、WCf 服务、Datetime.Today

Silverlight 3 + Java 网络服务

Silverlight OpenRIA - 重复的请求

从Silverlight使用Windows Azure Service Bus