我的任务是在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 其他支持类型的文档。
请告诉我,当结果与任何特定现有表格不匹配时,我需要做什么才能返回存储过程的结果
答案 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实例,它应该可以工作。