0

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

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

问题:

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

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

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

4

1 回答 1

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 实例,它应该可以工作。

于 2012-08-01T12:39:35.277 回答