我是Silverlight和WCF的新手。我创建了一个简单的Silverlight应用程序,在那里我在等待一秒后显示带有列表对象集合数据的警报消息框。
我使用WCF连接数据库。但我首先在集合列表中添加所有数据库数据,然后将该列表对象发送到silverlight,Silverlight正在迭代。
WCF服务代码,用于在List集合中插入数据时连接到数据库:
public List<int> GetData()
{
List<int> list = new List<int>();
using (SqlConnection connection = new SqlConnection())
{
connection.ConnectionString =
System.Configuration.ConfigurationManager.ConnectionStrings["sqlConnection"].ToString();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.Text;
command.CommandText = "Select * from insertItem";
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
list.Add(reader.GetInt32(1));
}
}
}
}
return list;
}
Silverlight代码从WCF服务访问列表类,并在等待一秒后在消息框中显示:
Service1Client client = new Service1Client();
client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(DisplayResults);
client.GetDataAsync(1);
private void DisplayResults(object sender, GetDataCompletedEventArgs e)
{
timer.Stop();
ObservableCollection<int> list = e.Result;
foreach (int i in list)
{
HtmlPage.Window.Alert(i.ToString());
Thread.Sleep(1000);
}
}
有谁能告诉我如何直接将数据显示到来自WCF服务的silverlight,而无需先等待将所有数据放入List类集合中,然后再显示它?什么是更好的方法?
答案 0 :(得分:1)
我不确定您是否在询问您所做的事情是否是最佳做法。是的,您需要首先从数据库收集数据,以便能够通过Web服务将其发送给您的调用者。你做到了,那没关系。你本可以使用一些mapper,但是因为那部分有用,你应该没问题。为什么改变它?问题是什么?它慢吗?必须是不同的东西,也许你想要发送太多的数据?尝试添加一些约束,仅检索前15个项目,并在用户浏览结果时继续请求更多项目。
如果您担心将内容添加到列表中需要太长时间,请不要,这可能不是问题,而是请求的数据大小。
要显示数据,只需添加一个功能强大的控件并将数据源设置为列表。完成!
这是一个walkthrough,这里是an article,由你的银色大师no1,ScottGu本人报道。应该可以帮助你入门。
如果您真的想要更改数据访问方式,可以查看RIA Services for Silverlight,但这被认为是一项高级技术。
如果这对您没有帮助,您可能想要优化您的问题。那么,您认为当前的设计需要改变什么?什么不能按预期工作?
编辑:在您回答我的评论后,我认为您可以通过实施Duplex Service来实现您想要做的事情。本主题介绍如何创建可与Silverlight客户端通信的双工Windows Communication Foundation(WCF)服务。双工服务维护Silverlight客户端的回调通道,允许服务拨打客户端。双工服务具有许多应用,包括例如用于即时消息的聊天服务器或向客户端发送通知的监控服务。此示例提供的服务允许客户端按名称订购指定数量的产品项。它模拟处理订单,然后回调给订单状态的客户端。