Вы действительно путаете несколько способов вызова веб-сервисов и Rx.Вам действительно нужно выбрать один путь и придерживаться его.
Если вы собираетесь использовать Rx, то у вас будет что-то вроде этого:
public Page()
{
InitializeComponent();
DataContext = App.ViewModel;
this.Loaded += new RoutedEventHandler(Page_Loaded);
}
void Page_Loaded(object sender, RoutedEventArgs e)
{
App.ViewModel.LoadData();
var storedStock =
new ObservableCollection<WebServiceClass.ItemGetValues>();
List.ItemsSource = storedStock;
var values =
Observable.Using<WebServiceClass.ItemGetValues, GPWWebservicePortTypeClient>
(() => new GPWWebservicePortTypeClient(), ws =>
{
var clientGetLastValue = Observable
.FromAsyncPattern<string, GetLastValueResponse>
(ws.BeginGetLastValue, ws.EndGetLastValue);
Func<string, WebServiceClass.ItemGetValues> deserializeFirst = r =>
((List<WebServiceClass.ItemGetValues>)JsonConvert
.DeserializeObject(r,
typeof(List<WebServiceClass.ItemGetValues>)))
.First();
return
from item in App.ViewModel.Items
from e in clientGetLastValue(item)
select deserializeFirst(e.Result);
});
values.Subscribe(storedStock.Add);
}
Вы будетедолжны получить правильные имена вызовов методов для вашего клиента веб-службы, но код должен быть примерно правильным.Дайте мне знать, как у вас дела.
Я исправил код выше.Я должен был вернуть запрос внутри вызова Using
, а не присваивать его values
.
Я исправил вызов на FromAsyncPattern
, чтобы использовать правильные имена методов и тип возврата из реальной сетиСсылка на класс обслуживания отправлена по электронной почте.
Это должно выглядеть так:
Observable.FromAsyncPattern<string, GetLastValueResponse>
(ws.BeginGetLastValue, ws.EndGetLastValue);