【问题标题】:How to call Silverlight methods from WCF services如何从 WCF 服务调用 Silverlight 方法
【发布时间】:2011-10-05 08:58:05
【问题描述】:

我是 Silverlight 和 WCF 的新手。我创建了一个简单的 Silverlight 应用程序,等待一秒钟后,我在其中显示带有来自列表对象集合的数据的警报消息框。

我使用 WCF 连接到数据库。但我首先将所有数据库数据添加到集合列表中,然后将该列表对象发送到 silverlight,silverlight 正在迭代。

在列表集合中插入数据时连接到数据库的 WCF 服务代码:

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 类集合中,然后再显示它?有什么更好的方法?

【问题讨论】:

  • 我想我不明白你的问题。你想让我做什么?我的意思是,当您通过 wcf 服务访问数据库时,您必须将数据“放置”在某个地方,以便可以将其序列化并发送给您的调用者(恰好是 silverlight)。如果它太慢你可能想删除 Thread.Sleep() 然后...
  • 我实际上想直接在 WCF 类中访问任何 silverlight 方法,这样每当我按顺序从数据库中获取任何数据时,我可以在等待一秒钟后直接将其显示到 silverlight,而无需将其放在首位在 List 集合对象中。有可能吗?

标签: c# .net silverlight wcf


【解决方案1】:

我不确定你是否在问你所做的是否是最佳实践。是的,您需要先从数据库中收集数据,然后才能通过网络服务将其发送给您的调用者。你做到了,那很好。您也许可以使用一些映射器,但是由于该部分有效,您应该没问题。为什么要改变它?问题是什么?慢吗?一定是不同的东西,也许你试图发送的数据太多?尝试设置一些约束,仅检索前 15 个项目,并在用户浏览结果时继续请求更多。

如果您担心将内容添加到列表中需要很长时间,请不要担心,这可能不是问题,而是请求的数据大小。

要显示数据,您只需添加一个有能力的控件并将数据源设置为列表。完成!

这是walkthrough,这是an article,由您的silverlight Guru no1,ScottGu 本人涵盖该主题。应该可以帮助您入门。

如果您真的想改变访问数据的方式,不妨看看RIA Services for Silverlight,尽管这被认为是一种高级技术。

如果这对您没有帮助,您可能需要完善您的问题。那么,您认为您当前的设计需要改变什么?什么没有按预期工作?

编辑:在您回答我的评论后,我认为您可以通过实施Duplex Service 来实现您想要做的事情。

本主题介绍如何创建可以与 Silverlight 客户端通信的双工 Windows Communication Foundation (WCF) 服务。双工服务维护到 Silverlight 客户端的回调通道,允许服务调用客户端。双工服务有许多应用程序,例如,用于即时消息传递的聊天服务器或向客户端发送通知的监控服务。此示例提供了一项服务,允许客户按名称订购指定数量的产品项目。它模拟处理订单,然后以订单状态回调客户端。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多