【问题标题】:How to select data from database and return it via a WCF service?如何从数据库中选择数据并通过 WCF 服务返回?
【发布时间】:2016-06-29 22:59:56
【问题描述】:

我有一个从数据库中获取FilenamePath(2 列)的存储过程。我需要创建一个 WCF 服务,将数据返回为任何使用该服务的应用程序都可以使用的格式,例如 List<string> 或类似的东西。

最好的方法是什么(设计和实现方面)?

这是我尝试通过 Dapper ORM 执行的操作,但我不确定它是否会按预期工作。

public IEnumerable<dynamic> RetrieveIncompletedFiles(int type)
{
    try
    {
        using (_connection = new SqlConnection(_sqlConnectionString))
        {
            _connection.Open();
            var files = _connection.Query("SelectIncompletedFilesByFiletypeFromAsyncFileProcessingQueue", new { Filetype = type }, commandType: CommandType.StoredProcedure);
            return files;
        }
    }
    catch (Exception ex)
    {
        return null;
    }
}

【问题讨论】:

    标签: sql asp.net-mvc wcf dapper


    【解决方案1】:

    这几乎肯定不会按预期工作。 WCF 希望处理已知架构和简单数据类型,通常是 List&lt;SomeType&gt;,其中 SomeType 是一个 public 类,它被标记为带有 [DataMember] 元素的 [DataContract]。幸运的是,这其中的精巧部分应该很简单:

     public List<SomeType> RetrieveIncompletedFiles (int type)
    {
        using (connection = new SqlConnection(_sqlConnectionString))
        {
            return connection.Query<SomeType>("SelectIncompletedFilesByFiletypeFromAsyncFileProcessingQueue", new { Filetype = type }, commandType: CommandType.StoredProcedure).AsList();
        }
    }
    

    【讨论】:

    • 好的,我明白了。我会试一试。 [DataContract] 和 [DataMember] 是否类似于 MVC 中的模型?
    • @ygongdev 之类的;它们是用于描述类型协定的 WCF (DataContractSerializer) 机制。
    • 好的,我创建了一个带有 2 个数据成员(文件名、路径)的“FilenameAndPath”(我知道的坏名字)DataContract 我如何在假设控制台应用程序中使用它?我正在尝试以下List&lt;FilenameandPath&gt; blahblah = processor.RetrieveIncompletedFiles(filetype); 但显然 FilenameandPath 无法识别
    • 那里没有“显然”-应该可以;你确定这不仅仅是一个错字(例如andAnd) - 尝试按 ctrl+。在类型上查看 IDE 是否提示您修复全名
    • 啊,知道了,我忘了using AsyncFileProcessorService; 但是,现在我遇到了一个有趣的错误,它说我不能convert type 'string[]' to List&lt;FilenameAndPath&gt;,但是OperationContract 服务的返回类型是List&lt;FilenameAndPath&gt; ?感谢您迄今为止的所有帮助
    【解决方案2】:

    编辑:在与客户端的引用进行了很多斗争之后,我终于使用上面的代码让它工作了。我必须配置服务参考设置。我必须将集合类型从数组更改为列表,并且取消选中“重用引用”,如果我没有取消选中,我在 Reference.cs 中会出现很多错误,这使得在客户端工作很痛苦。

    List&lt;AsyncFileProcessorService.FilenameAndPath&gt; filenameAndPaths = processor.RetrieveIncompletedFiles(filetype);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2012-03-01
      相关资源
      最近更新 更多