WCF从存储过程返回结果

时间:2012-08-01 12:13:28

标签: vb.net wcf

我的任务是在VB.NET中实现WCF服务。此WCF服务将由我们自己的.NET Windows窗体应用程序使用,并提供来自SQL Server数据库的数据。数据将显示在第三方网格中(Infragistics)。

最初我打算使用ADO.NET并在WCF服务中从SQL返回数据表或数据集,但我读过太多文章,鼓励我远离通过互联网返回数据表。我并不担心互操作性,但我担心过程的大小/速度。这导致我开始使用linq to sql来返回我可以通过互联网传递的实体(.dbml)

问题:

我们的许多数据来自存储过程,这些存储过程返回的结果集是现有表的混合匹配,因此不匹配任何返回类型。我已经导入了一个返回(自动生成的类型)的存储过程但是当我尝试通过WCF服务返回此类型时,我在tracelog中收到此错误:

  

类型   System.Data.Linq.SqlClient.SqlProvider + SingleResult'1 [benchmark_prd_colour_findResult]   无法序列化。考虑用它标记它   DataContractAttribute属性,并标记其所有成员   想要使用DataMemberAttribute属性进行序列化。如果是这种类型   是一个集合,考虑用它来标记它   CollectionDataContractAttribute。请参阅Microsoft .NET Framework   其他支持类型的文档。

请告诉我,当结果与任何特定现有表格不匹配时,我需要做什么才能返回存储过程的结果

1 个答案:

答案 0 :(得分:0)

将其翻译为VB! (对不起,没看到标签......假设C#)

构建自己的对象 - 并将其标记为:

[DataContract]
public class MyObject{

//here go all your fields which match whats returned in your stored proc
[DataMember]
public String MyField;
[DataMember]
public int MySecondField;

}

然后在获取存储过程的结果

时填充此内容
public MyObject GetResult(){
stored_proc_result result = factory.callProc(); //obviously replace this with whatever you use!
MyObject obj = new MyObject{
 MyField = FieldOne,
 MySecondField = FieldTwo
};
return obj;
}

然后,如果在WCF调用中传递MyObject实例,它应该可以工作。