RX和Web服务集合加载wp7时出现问题。
|
我是C#和wp7平台的初学者,我对从Web服务获取请求有个好主意。
我用PHP(nusoap-WSDL)制作了Web服务,并且在“正常”下使用一切正常。
现在,当打开Page时,我将ObservableCollection保存在IsolatedStorage中,并进行加载(监视的堆栈交换列表)。然后,我想刷新Web服务中每个项目的数据。
我不知道这是否是个好主意。
码:
private GPWWebservicePortTypeClient client = new GPWWebservicePortTypeClient();
private ObservableCollection<WebServiceClass.ItemGetValues> StoredStock =
new ObservableCollection<WebServiceClass.ItemGetValues>();
public const string _fileName = \"listaObserwowanych.xml\";
public Page()
{
InitializeComponent();
DataContext = App.ViewModel;
this.Loaded += new RoutedEventHandler(Page_Loaded);
client.GetLastValueCompleted +=
new EventHandler<GetLastValueCompletedEventArgs>(client_GetLastValueCompleted);
foreach (var itemGetValuese in App.ViewModel.Items)
{
client.GetLastValueAsync(itemGetValuese.name);
}
var o =
Observable.FromEvent<GetLastValueCompletedEventArgs(client,\"GetLastValueCompleted\")
.Subscribe(setList);
}
void client_GetLastValueCompleted(object sender, GetLastValueCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(Convert.ToString(e.Error));
}
else
{
ObservableCollection<WebServiceClass.ItemGetValues> ListValues =
(ObservableCollection<WebServiceClass.ItemGetValues>)
JsonConvert.DeserializeObject(e.Result,
typeof(ObservableCollection<WebServiceClass.ItemGetValues>));
StoredStock.Add(ListValues[0]);
}
}
private void setList(IEvent<GetLastValueCompletedEventArgs> ex)
{
List.ItemsSource = StoredStock;
}
void Page_Loaded(object sender, RoutedEventArgs e)
{
App.ViewModel.LoadData();
List.ItemsSource = App.ViewModel.Items;
}
就像您看到的那样,我使用RX调用方法client_GetLastValueCompleted将存储结果添加到辅助变量(StoredStock)。然后刷新setList方法中的List,但该方法是client_GetLastValueCompleted,这不是一个好主意,因为我只需要在foreach中所有已运行的GetLastValueAsync完成后才运行该方法。
第二个问题:由于异步Web服务方法StoredStock有时与App.ViewModel.Items具有不同的顺序。
有什么好主意如何以正确的方式做到这一点?
最好的祝福,
卢卡斯
没有找到相关结果
已邀请:
2 个回复
犀耽澄协吻
您必须为您的Web服务客户端获取正确的方法调用名称,但是代码应该大致正确。让我知道你怎么去。 我更正了上面的代码。应该在
调用内返回了查询,而不是将查询分配给
。 我更正了对
的调用,以使用通过电子邮件发送的实际Web服务引用类中的正确方法名称和返回类型。 它看起来应该像这样:
豹芜澈