在没有.Net客户端的wcf服务中共享.Net类型

时间:2014-12-02 01:47:24

标签: c# wcf

我在WCF中开发webservice,返回dataset

当我创建我的.Net测试应用程序以使用WCF时,我可以收到dataset并将其分配给datagrid而没有任何问题。 Visual Studio为我完成了所有工作。

但是当我的合作伙伴试图在c ++中使用WCF时,他告诉我他将数据处理为XML并将解析作为字符串进行处理。

我猜他应该有更好的方式来消费我的数据。
但是因为我不熟悉c ++,所以不知道应该怎么做。
我应该为Dataset行创建一个类,而是返回一个MyClass数组吗?

现在,另一方面,如果我想收到他的数据集?
他将如何创建XML?
或者我应该接收XML字符串并在我这边进行解析吗?

编辑:以防c ++在Linux下。

2 个答案:

答案 0 :(得分:2)

DataSet是一种.Net数据类型,在非.Net语言中没有特定的模拟类型。如果C ++使用者正在使用.Net,那么理论上DataSet应该是可反序列化的。

对于API,您通常希望使用可以序列化为数组的简单自定义对象和集合类型。例如,如果您的DataSet具有包含

的架构
Column1    int
Column2    string
Column3    bool

然后执行,然后您可以创建一个自定义类来表示:

public class YourObjectType 
{
    public int Column1 { get; set; }
    public string Column2 { get; set; }
    public bool Column3 { get; set; }
}

将DataSet内容存储在适当的集合对象中。如果排序很重要,那么转换为Queue<YourObjectType>,否则List<YourObjectType>通常是最好的方法。这两种类型都序列化为一个数组。您可以遍历数据集中的行,以便每行创建一个对象,然后将该对象放在新集合中。

作为进一步的提示:为了提升性能,请考虑完全摆脱DataSet。如果从数据库中提取数据,最好是获取DataReader而不是DataSet,然后将该DataReader的内容直接映射到新的对象类型和集合中。与直接读取数据库数据相比,DataSet的计算成本更高。

答案 1 :(得分:0)

考虑公开REST端点(通过WCF或WebAPI)而不是Web服务/ SOAP端点。然后,您的C ++开发人员可以使用C ++ REST SDK来构建他的客户端。

http://msdn.microsoft.com/en-us/magazine/dn342869.aspx

更多信息:http://channel9.msdn.com/Events/GoingNative/2013/A-Cpp-REST-SDK-OSS-web-services-on-Windows-and-Linux