Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net WCF从存储过程返回结果_Vb.net_Wcf - Fatal编程技术网

Vb.net WCF从存储过程返回结果

Vb.net WCF从存储过程返回结果,vb.net,wcf,Vb.net,Wcf,我的任务是在VB.NET中实现WCF服务。此WCF服务将由我们自己的.NET Windows窗体应用程序使用,并从SQL Server数据库提供数据。数据将显示在第三方网格(Infragistics)中 最初我打算使用ADO.NET并在WCF服务中从SQL返回数据表或数据集,但我读了太多鼓励我远离通过internet返回数据表的文章。我不担心互操作性,但我担心流程的大小/速度。这导致我开始使用linq to sql返回可以通过internet传递的实体(.dbml) 问题是: 我们的许多数据来自

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

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

问题是:

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

类型 System.Data.Linq.SqlClient.SqlProvider+SingleResult'1[benchmark\u prd\u color\u findResult] 无法序列化。考虑将它标记为 DataContractAttribute属性,并将其所有成员标记为 希望使用DataMemberAttribute属性序列化。如果类型 是一个集合,考虑用 CollectionDataContractAttribute。请参阅Microsoft.NET Framework 其他支持类型的文档

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

将其转换为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实例,它应该可以工作。

非常感谢Chris!!我是否必须循环“result”对象中的每个项来填充“obj”对象?这似乎有点低效,您可以在这方面进行改进-但这是我使用itI的方式我只希望有一种方法可以将结果直接返回到DataContract中定义的类中。在DataContract中循环结果并创建类集合仍然有效,不过再次感谢