Как сделать так, чтобы данные из моей службы WCF сохранялись в моем приложении Silverlight? - PullRequest
2 голосов
/ 03 сентября 2010

У меня есть приложение Silverlight, которое получает данные из базы данных через службу WCF. Мое приложение должно отображать референтные данные каждый раз, когда кнопка получает MouseOvered. Я сделал это так, чтобы, когда кнопка получала MouseOvered, я вызывал свой сервис и извлекал данные, но это вызывало большую задержку. Теперь я думаю, что другим способом должно быть создание списка всех объектов из таблицы и просто поиск идентификатора в списке, когда действие запускается. Я начал кодировать, но это привело к сбою (и такой уродливый кусок кода).

Мой рабочий код

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 никогда не достигается.

Заранее спасибо, ребята!

1 Ответ

1 голос
/ 04 сентября 2010

Является ли этот звонок:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...