【问题标题】:WCF returning results from stored procedureWCF 从存储过程返回结果
【发布时间】:2012-08-01 12:13:28
【问题描述】:

我的任务是在 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 属性进行序列化。如果类型 是一个集合,考虑用 集合数据合同属性。请参阅 Microsoft .NET 框架 其他受支持类型的文档。

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

【问题讨论】:

    标签: vb.net wcf


    【解决方案1】:

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

    【讨论】:

    • 非常感谢克里斯!我是否必须遍历“结果”对象中的每个项目来填充“obj”对象?好像有点低效
    • 您可以改进这一点 - 但这是我会采用的方式
    • 我只是希望有一种方法可以将结果直接返回到 DataContract 中定义的类中。循环遍历结果并在 DataContract 中创建类的集合,但再次感谢
    猜你喜欢
    • 2013-06-21
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2016-03-27
    • 2015-04-14
    • 2021-03-22
    • 2015-06-03
    相关资源
    最近更新 更多