Служба WCF RIA возвращает данные, не совпадающие на двух сторонах службы - PullRequest
0 голосов
/ 15 декабря 2011

Первоначально я думал, что это проблема INotifyPropertyChanged / Binding, потому что я не уверен, как отладить часть Silverlight. Поэтому мне пришлось поместить окно сообщения в цикл foreach и просмотреть значения после того, как данные были возвращены таким образом. Оказывается, у меня возникают проблемы с получением обновленных данных из сервиса. Я использую сервис, чтобы сделать некоторые обновления данных на сервере, и когда он получает ответный вызов, перезагрузите данные. Эта часть службы возвращает правильные данные (я проверил, используя точку останова, чтобы я мог посмотреть, какие данные хранятся в результате). Но сторона Silverlight не получает правильные данные. Вот соответствующий код.

public IQueryable<OurClass> GetItems(string condition)
{
    var result   = from items in context.OurClass 
                   where item.value == condition  
                   select item;

    return result; //had my breakpoint here and the values were the correct updated values
}

/

Context.Load<OurClass>(Context.GetItemsQuery(condition)).Completed += new EventHandler(Context_LoadCompleted);

/

private void Context_LoadCompleted(object sender, EventArgs e)
{
    IEnumerable<OurClass> result = ((LoadOperation<OurClass>)sender).Entities;
    //This is where I put a MessageBox to view the returned results and the data was different
    //than what was contained in the other result
}

Есть идеи, что может вызвать это? Что я должен смотреть дальше?

EDIT:

В некоторых примерах данных OurClass.OurProperty будет равняться «Test» на стороне сервера, но как только он будет получен на клиенте, он будет равняться «Development», который был старым значением. IEnumerable будет хранить только что добавленные записи, а не удаленные. Все, что существовало ранее, будут содержать старые значения свойств, а не новые значения.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Решением было то, что мне нужно было добавить параметр LoadBehavior.RefreshCurrent к вызову запроса. Итак, это:

Context.Load<OurClass>(Context.GetItemsQuery(condition)).Completed += new EventHandler(Context_LoadCompleted); 

Нужно быть таким:

Context.Load<OurClass>(Context.GetItemsQuery(condition), LoadBehavior.RefreshCurrent, true).Completed += new EventHandler(Context_LoadCompleted);
0 голосов
/ 15 декабря 2011

Чем отличаются данные на каждой стороне услуги?Можете ли вы показать нам пример данных.Вы можете просмотреть данные, используя что-то вроде wireshark (должно быть на сервере или на вашем клиенте, с которого вы запускаете свой апплет silverlight.)

Вы пытались правильно отладить ваш silverlight, то есть присоединитьк процессу, как показано здесь: http://www.michaelsnow.com/2010/04/22/silverlight-tip-of-the-day-2-attach-to-process-debugging/

Я бы также рекомендовал включить трассировку WCF, как описано здесь: http://msdn.microsoft.com/en-us/library/ms733025.aspx

...