积极答复者
一个“类”中,不能多次调用“WCF 代理类”中同一方法???

问题
-
一个“类”中,不能多次调用“WCF 代理类”中同一方法???
代码如下:
private void BindBaseDatas()
{
string weburl = Application.Current.Host.Source.ToString();
weburl = weburl.Substring(0, (weburl.Length - 23)) + "/ChartsService.svc";
MyChartsService.ChartsServiceClient client = new MyChartsService.ChartsServiceClient("CustomBinding_ChartsService1", weburl);
client.GetCodeDetailsEntityDataAsync("BldingFunction");
client.GetCodeDetailsEntityDataCompleted+=new EventHandler<GetCodeDetailsEntityDataCompletedEventArgs>(client_GetCodeDetailsEntityDataCompleted2);
client.GetCodeDetailsEntityDataAsync("MeterUseType");
client.GetCodeDetailsEntityDataCompleted += new EventHandler<MyChartsService.GetCodeDetailsEntityDataCompletedEventArgs>(client_GetCodeDetailsEntityDataCompleted);
BindYears();
}
void client_GetCodeDetailsEntityDataCompleted2(object sender, MyChartsService.GetCodeDetailsEntityDataCompletedEventArgs e)
{
tlb_Region.ItemsSource = e.Result;
tlb_Region.SelectedIndex = 0;
//GetMonitorDatas();
}
void client_GetCodeDetailsEntityDataCompleted(object sender, MyChartsService.GetCodeDetailsEntityDataCompletedEventArgs e)
{
RadMenuItem rmi_all = new RadMenuItem();
rmi_all.Header = "总量";
rmi_all.Tag = "";
rmi_all.IsCheckable = true;
rmi_all.IsChecked = true;
rmi_Subentry.Items.Add(rmi_all);
ObservableCollection<MyChartsService.CodeDetailsEntity> subentrys = e.Result;
foreach (var st in subentrys)
{
RadMenuItem rmi = new RadMenuItem();
rmi.Header = st.DpCodeName;
rmi.Tag = st.DpCodeId;
rmi.IsCheckable = true;
rmi_Subentry.Items.Add(rmi);
}
}问题:像这样的需求,需要多次调用“代理类”中的“同一方法"应该怎么办???这是一个WCF缺点啊。。。
Science and technology is my lover.
答案
-
你好,
你这个问题是编码方面的问题,而不是WCF方面的问题.
Event事件如果你使用+=赋值两次的话,那么就会抛弃前面那一次.因为一个Event只能有一个Handler.
按你这种情况,你就要重新创建一个WCF方法来提供第二个需要注册的Event的请求.
因为你提出了一个重复的问题,我会在另外一个帖子中回复:
全部回复
-
你好,你使用了两次client.GetCodeDetailsEntityDataCompleted+=,即就该了值,事件的复制类似于引用,所以必然出错.
既然在同一个类中进行的,那么代码之间几乎是按毫秒计算的前后差异,为什么不一起发送?
我建议把数据一起发送.
谢谢,Tanks a lot...
如何一起发送???参数条件不一样啊,而且两个结果集要分开的,需要单独处理。
代码如下:
private void BindBaseDatas()
{
string weburl = Application.Current.Host.Source.ToString();
weburl = weburl.Substring(0, (weburl.Length - 23)) + "/ChartsService.svc";
MyChartsService.ChartsServiceClient client = new MyChartsService.ChartsServiceClient("CustomBinding_ChartsService1", weburl);
client.GetCodeDetailsEntityDataAsync("BldingFunction");
client.GetCodeDetailsEntityDataCompleted+=new EventHandler<GetCodeDetailsEntityDataCompletedEventArgs>(client_GetCodeDetailsEntityDataCompleted2);
client.GetCodeDetailsEntityDataAsync("MeterUseType");
client.GetCodeDetailsEntityDataCompleted += new EventHandler<MyChartsService.GetCodeDetailsEntityDataCompletedEventArgs>(client_GetCodeDetailsEntityDataCompleted);
BindYears();
}
void client_GetCodeDetailsEntityDataCompleted2(object sender, MyChartsService.GetCodeDetailsEntityDataCompletedEventArgs e)
{
tlb_Region.ItemsSource = e.Result;
tlb_Region.SelectedIndex = 0;
//GetMonitorDatas();
}
void client_GetCodeDetailsEntityDataCompleted(object sender, MyChartsService.GetCodeDetailsEntityDataCompletedEventArgs e)
{
RadMenuItem rmi_all = new RadMenuItem();
rmi_all.Header = "总量";
rmi_all.Tag = "";
rmi_all.IsCheckable = true;
rmi_all.IsChecked = true;
rmi_Subentry.Items.Add(rmi_all);
ObservableCollection<MyChartsService.CodeDetailsEntity> subentrys = e.Result;
foreach (var st in subentrys)
{
RadMenuItem rmi = new RadMenuItem();
rmi.Header = st.DpCodeName;
rmi.Tag = st.DpCodeId;
rmi.IsCheckable = true;
rmi_Subentry.Items.Add(rmi);
}
}像这样的需求,需要多次调用“代理类”中的“同一方法"应该怎么办???这是一个WCF缺点啊。。。
实例化模式:WCF4.0 默认的“DataSerialize" 。 没有开启会话。。。
问题1:
如上面所示,在“BindBaseDatas()”方法中“两次”调用了“client.GetCodeDetailsEntityDataCompleted”,它们都委托给了同一个“client_GetCodeDetailsEntityDataCompleted”,这样怎么处理返回的数据???
问题二:
如上面所示,在“BindBaseDatas()”方法中“两次”调用了“client.GetCodeDetailsEntityDataCompleted”,它们分别委托给“client_GetCodeDetailsEntityDataCompleted”个“client_GetCodeDetailsEntityDataCompleted”和“client_GetCodeDetailsEntityDataCompleted2”, 但是返回只有第二次调用服务返回的数据,怎么办???
问题三:怎么实现多次调用同一个服务???
比如:需要两次调用“GetMonitoringDatasEntity”服务方法,就要再创建一个“GetMonitoringDatasEntityTwo”服务方法,它们的参数和返回值都是一样的。
这个问题可以解决吗??? Thanks a lot... 完整代码如下:
private void BindBaseDatas()
{
string weburl = Application.Current.Host.Source.ToString();
weburl = weburl.Substring(0, (weburl.Length - 23)) + "/ChartsService.svc";
MyChartsService.ChartsServiceClient client = new MyChartsService.ChartsServiceClient("CustomBinding_ChartsService1", weburl);
client.GetMonitoringDatasEntityAsync(monitortype, monitordate_type, monitordate_value, monitortype_type, monitortype_value, meterusetype, true);
client.GetMonitoringDatasEntityCompleted += new EventHandler<GetMonitoringDatasEntityCompletedEventArgs>(client_GetMonitoringDatasEntityCompleted);
client.GetMonitoringDatasEntityTwoAsync(monitortype, monitordate_type, monitordate_value, monitortype_type, monitortype_value, meterusetype, false);
client.GetMonitoringDatasEntityTwoCompleted += new EventHandler<GetMonitoringDatasEntityTwoCompletedEventArgs>(client_GetMonitoringDatasEntityTwoCompleted);
BindChart();
}Science and technology is my lover.
-
你好,
你这个问题是编码方面的问题,而不是WCF方面的问题.
Event事件如果你使用+=赋值两次的话,那么就会抛弃前面那一次.因为一个Event只能有一个Handler.
按你这种情况,你就要重新创建一个WCF方法来提供第二个需要注册的Event的请求.
因为你提出了一个重复的问题,我会在另外一个帖子中回复:
-
因为你提出了一个重复的问题,我会在另外一个帖子中回复: