【问题标题】:How to make the data from my WCF Service to get stored inside my Silverlight application?如何使我的 WCF 服务中的数据存储在我的 Silverlight 应用程序中?
【发布时间】:2010-09-04 04:47:26
【问题描述】:

我有 Silverlight 应用程序,它通过 WCF 服务从数据库中检索数据。我的应用程序要做的是在按钮被 MouseOvered 时显示参考数据。我这样做的方式是,当一个按钮被 MouseOvered 时,我调用我的服务并检索数据,但这会产生很大的延迟。现在,我认为另一种方法应该是从表中列出所有对象的列表,并在触发操作时仅在列表中搜索 id。我开始编码,但它导致失败(以及如此丑陋的一段代码)。

我的工作代码

private void MouseOverHarbor(object sender, RoutedEventArgs e)
{
    Ellipse thisPath = (Ellipse)sender;
    DataRetrieverReference.DataRetrieverClient webService = new DataRetrieverReference.DataRetrieverClient();
    webService.GetDataCompleted += new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted);
    webService.GetDataAsync(Convert.ToInt32(thisPath.DataContext));
}

void webService_GetDataCompleted(object sender, WebPortos.DataRetrieverReference.GetDataCompletedEventArgs e)
{
    NameField.Text = e.Result.Name;
    CityField.Text = e.Result.City;
    StateField.Text = e.Result.State;
    CompanyField.Text = e.Result.Company;
}

我想做什么

private List<vwPortos_SEP> harborList;
private int counter;

public Brasil()
{
    InitializeComponent();
    this.harborList = new List<vwPortos_SEP>();

    DataRetrieverClient webService = new DataRetrieverClient();
    webService.GetCounterCompleted += new EventHandler<GetCounterCompletedEventArgs>(webService_GetCounterCompleted);
    webService.GetCounterAsync();
    webService.GetDataCompleted += new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted);

    for (int i = 0; i < counter; i++)
    {                                
        webService.GetDataAsync(i);
    }               

}

void webService_GetDataCompleted(object sender, WebPortos.DataRetrieverReference.GetDataCompletedEventArgs e)
{
    MessageBox.Show("It works!");//It doesn't work!
    try
    {
        this.harborList.Add(e.Result);
    }
    catch (Exception exc)//It doesn't even throw ecxpetions, this method is never reached.
    {
        MessageBox.Show(exc.Message);
        MessageBox.Show(exc.InnerException.Message);
    }
}

也许我错过了一些非常重要的东西,但我的 webService_GetDataCompleted 方法永远无法实现。

在此先感谢各位!

【问题讨论】:

    标签: c# silverlight wcf


    【解决方案1】:

    这是电话吗:

    webService.GetCounterAsync();
    

    用来设置counter?

    如果是这样,您不会让它在以counter 作为终止值循环之前完成。 counter 很可能仍然是 0,因此您的 GetDataAsync 呼叫不会发生。

    for (int i = 0; i < counter; i++)
    {                                
        webService.GetDataAsync(i);
    }
    

    将此代码移动到您的webService_GetCounterCompleted 方法中,因此您的代码变为:

    public Brasil()
    {
        InitializeComponent();
        this.harborList = new List<vwPortos_SEP>();
    
        DataRetrieverClient webService = new DataRetrieverClient();
        webService.GetCounterCompleted +=
            new EventHandler<GetCounterCompletedEventArgs>(webService_GetCounterCompleted);
        webService.GetCounterAsync();
    }
    
    void webService_GetCounterCompleted(object sender,
             WebPortos.DataRetrieverReference.GetCounterCompletedEventArgs e)
    {
        webService.GetDataCompleted +=
         new EventHandler<DataRetrieverReference.GetDataCompletedEventArgs>(webService_GetDataCompleted);
    
        for (int i = 0; i < counter; i++)
        {                                
            webService.GetDataAsync(i);
        }
    }
    

    加上你现有的webService_GetDataCompleted 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2012-01-12
      • 2012-12-12
      相关资源
      最近更新 更多