【问题标题】:Getting returned list from web service从 Web 服务获取返回列表
【发布时间】:2015-11-25 00:16:18
【问题描述】:

我编写了一个相当简单的 Web 服务,它将 SQL 查询的结果集放入一个列表中。我在使用 Web 服务的项目中调用带有结果集的列表时遇到问题。我将把我的代码放在下面:

网络服务

[OperationContract]
List<ViewDetails> ViewDetails();

[DataContract]
public class ViewDetails
{
    public string TitleView { get; set; }
    public string BodyView { get; set; }
    public string AuthorView { get; set; }

    public ViewDetails() { }
    public ViewDetails(string myTitleView, string myBodyView, string myAuthorView)
    {
        this.TitleView = myTitleView;
        this.BodyView = myBodyView;
        this.AuthorView = myAuthorView;
    }
}

 public List<ViewDetails> ViewDetails()
    {
        List<ViewDetails> details = new List<ViewDetails>();

        SqlConnection conn = new SqlConnection(strConnString);
        conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT TOP 2 [My_Title] AS 'Title', [My_Body] AS 'Body', [My_Author] AS 'Author' FROM [My_table] ORDER BY [Date] DESC", conn);
        SqlDataReader rdrDetails = cmd.ExecuteReader();

        try
        {
            while (rdrDetails.Read())
            {
                details.Add(new ViewDetails(rdrDetails.GetSqlString(rdrDetails.GetOrdinal("Title")).ToString(), rdrDetails.GetSqlString(rdrDetails.GetOrdinal("Body")).ToString(), rdrDetails.GetSqlString(rdrDetails.GetOrdinal("Author")).ToString()));
            }
        }
        catch (Exception e)
        {
            //exception
        }
        finally
        {
            conn.Close();
        }

        return details;
    }

我正在使用网络服务的项目

 public async void ViewData()
 {
        ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
        string title = string.Empty;
        string body = string.Empty;
        string author = string.Empty;

        var res = await client.ViewDetailsAsync();
  }

我希望能够在我的 ViewData 类中做这样的事情,这样我就可以将结果存储在变量中并将它们分配给 textblocks 等。

title = res.TitleView;

但它不允许我....有人看到我缺少的东西吗?

注意:这是一个通用 Windows 应用程序

【问题讨论】:

  • 您的catch 没有捕捉到异常。添加Debug.WriteLine(ex.Message) 并查看它是否引发任何异常。看起来确实如此。
  • 这是一个基本的分步教程,您可以使用/关注codeproject.com/Articles/576820/…
  • @KosalaW 我知道,但我已经浏览了 Web 服务,它没有例外。它正确地填充了列表。但你是对的。
  • 你确定你的变量res是空的吗?
  • @Code 你为什么不使用调试器并单步调试代码并告诉我们什么是什么不是

标签: c# web-services asynchronous windows-applications


【解决方案1】:

您的ViewDetails 数据协定属性中缺少DataMember 属性。

[DataContract]
public class ViewDetails
{
   [DataMember]  
   public string TitleView { get; set; }
   [DataMember]
   public string BodyView { get; set; }
   [DataMember]
   public string AuthorView { get; set; }

    public ViewDetails() { }
    public ViewDetails(string myTitleView, string myBodyView, string myAuthorView)
    {
     this.TitleView = myTitleView;
     this.BodyView = myBodyView;
     this.AuthorView = myAuthorView;
    }
}

【讨论】:

  • 我想我有,我结合了你的解决方案和@siwydym67...将测试并发布结果
【解决方案2】:

您错过了resList&lt;ViewDetails&gt;res 不是 ViewDetails 的实例。所以你应该输入title = res[0].TitleView;

【讨论】:

  • 这不起作用...它不会将 TitleView 作为属性拉入
  • @Code: 同样的问题.. 你检查res 是否为空?
  • @KosalaW 不,它不为空。实例化后包含项目
  • 这意味着您的 Web 服务正在返回值。现在您的问题是什么?您无法找到访问res 内部内容的方法?添加观察者并尝试了解res 内部的结构。它是 ViewDetails 的集合。所以你应该能够遍历它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
相关资源
最近更新 更多