【问题标题】:Calling a wcf service method from Silverlight从 Silverlight 调用 wcf 服务方法
【发布时间】:2011-05-12 07:06:45
【问题描述】:

我的项目中需要调用一个wcf服务方法,如果我有一个叫getPrimaryList的方法,怎么调用呢?

[OperationContract]
        public List<PrimaryClass> getPrimaryList()
        {
            string priConn = System.Configuration.ConfigurationManager.ConnectionStrings["SchoolConnectionString"].ConnectionString;
            var priList = new List<PrimaryClass>();
            using (SqlConnection conn = new SqlConnection(priConn))
            {
                const string sql = @"SELECT PrimarySchool,TopHonour,Cca,TopStudent,TopAggregate,TopImage FROM [Primary]";
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    SqlDataReader dr = cmd.ExecuteReader(
                        CommandBehavior.CloseConnection);
                    if (dr != null)
                        while (dr.Read())
                        {
                            var pri = new PrimaryClass
                            {
                                PrimarySchool = dr.GetString(0),
                                TopHonour = dr.GetString(1),
                                Cca = dr.GetString(2),
                                TopStudent = dr.GetString(3),
                                TopAggregate = dr.GetString(4),
                                TopImage = dr.GetString(5)
                            };
                            priList.Add(pri);
                        }
                    return priList;

                }

            }
        }

【问题讨论】:

    标签: c# silverlight wcf methods service


    【解决方案1】:

    打开需要调用服务的项目。 将服务引用添加到 WCF 服务。 创建生成的代理/客户端类的实例并调用该方法。

    (此答案几乎与您的问题一样笼统,如果您需要更多详细信息,则必须专门询问)

    编辑

    例子(这里不需要使用dispatcher):

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var proxy = new ServiceReference1.HelloWorldServiceClient();
        proxy.SayHelloCompleted += proxy_SayHelloCompleted;
        proxy.SayHelloAsync(_nameInput.Text);
    }
    
    void proxy_SayHelloCompleted(object sender, ServiceReference1.SayHelloCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            this.Dispatcher.BeginInvoke(
                () => _outputLabel.Text = e.Result
            );
        }
        else
        {
            this.Dispatcher.BeginInvoke(
                () => _outputLabel.Text = e.Error.Message
            );
        }
    }
    

    【讨论】:

    • 假设我想使用一个按钮来调用服务,我该怎么做?
    • 我添加了一些代码,假设您想在 silverlight 中执行此操作
    • 这大概就是我要找的东西,但你能向我解释一下这两行代码的作用吗? proxy.SayHelloCompleted += proxy_SayHelloCompleted; proxy.SayHelloAsync(_nameInput.Text);
    • 在silverlight 中不能同步调用方法。因此,您要做的是注册匹配的已完成事件,该事件将在服务调用返回后立即引发。之后,您调用该方法的异步版本。此事件和 Async 方法是在您设置服务引用时由 Visual Studio 生成的。
    • 顺便说一句:你已经问过这个问题了:stackoverflow.com/questions/5974789/help-with-explanation 不是很清楚吗?
    【解决方案2】:

    假设你想在 button_click 上调用服务..

    private void Button_Click(object sender, RoutedEventArgs e) 
    {     
       var client = new ServiceReference1.MyWCFServiceClient(); 
       var result = client.getPrimaryList();
       //do something here with the result now....
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2014-04-30
      相关资源
      最近更新 更多