C ++返回Web Service的值

时间:2009-08-17 23:14:02

标签: c# c++ web-services

我有一些.dll原生C ++程序,主要返回int / double值,数组结构和字符串值。这些值应该由C#中的Web服务程序执行。

我想知道是否真的有必要修改我的C ++程序并适应Web服务,即将XML字符串/文件等值与XSD字符串/文件一起返回。我个人认为我不应该修改它们,因为我认为C#可以使用interop接收C ++值,并且可以使用.Net库的组件轻松序列化。

但是,我想收到关于将C ++值传递给Web服务的最佳,快速和有效方法的评论。

谢谢!

5 个答案:

答案 0 :(得分:1)

我认为你可以照你所说的那样做 在过去,我通过在我的本机类中编写C ++ / CLI包装器并从C#中使用它们来实现相同或相似的功能。这并没有引起C#interop的开销,我注意到它可能非常昂贵。

答案 1 :(得分:0)

我认为P / Invoke就是你想要的。它允许您在托管代码和非托管代码之间传递简单和复合类型,并且您不必编写任何C ++ / CLI包装程序集。

This(MSDN)是P / Invoke的良好开端。如果向下滚动此处的部分名为“为用户定义的结构指定自定义封送”。这将允许您来回传递用户定义的结构。

查找MarshallAs,您可以看到所有可以编组的原始本机类型。 DllImport 属性也是您想要搜索的内容。

如果性能成为一个问题,我建议序列化/反序列化为命名管道或本地套接字,但我不完全清楚那里的性能特征。祝你好运!

答案 2 :(得分:0)

将C ++应用程序公开为Web服务的最佳,最快,最有效和最有效的方法是将C ++ Web服务代码置于其上。

请参阅GSoap了解一个非常快速的开源实现 - 一个3-5 times faster than the .NET and Java等效的实现。

答案 3 :(得分:0)

只要您可以将其返回给C#,C#应该能够从Web服务返回它。您根本不需要进行任何手动序列化。

答案 4 :(得分:0)

如果您选择进入序列化路线,您可能需要查看'thrift'(http://incubator.apache.org/thrift/)。

来自网站:

  

Thrift是一个软件框架   可扩展的跨语言服务   发展。它结合了一个软件   堆栈与代码生成引擎   构建有效工作的服务   并且在C ++,Java之间无缝地,   Python,PHP,Ruby,Erlang,Perl,   Haskell,C#,Cocoa,Smalltalk和   OCaml的。

     

最初在Facebook开发,   Thrift于2007年4月开源   并进入了Apache孵化器   2008年5月。