通过 web 服务恢复函数的结果并存储在变量中
Posted
技术标签:
【中文标题】通过 web 服务恢复函数的结果并存储在变量中【英文标题】:Recovery result of a function via a webservice and stored in a variable 【发布时间】:2015-01-27 14:13:01 【问题描述】:我想得到这个方法的结果:bool authentication(string log,string pass)和这个methode:string role(string log,string pass)来测试authentifcation 这就是我所做的:
private void bntValideAuthen_Click(object sender, RoutedEventArgs e)
client.AuthentificationCompleted += client_AuthentificationCompleted;
client.RoleCompleted += client_RoleCompleted;
ServiceConsum.Service1Client client = new ServiceConsum.Service1Client();
string rol=client.RoleAsync(txtLogin.text,txtpass.text);
bool auth = client.AuthentificationAsync(txtLogin.text,txtpass.text);
if((auth==true)&&(role=="admin"))
NavigationContext.Equals(new Uri("/Views/admin/starAdmin.xaml", UriKind.Relative));
else
message.BOX("error");
它给出了这个错误: 不能将类型'void'隐式转换为'string'
【问题讨论】:
看起来你的RoleAsync
和 AuthentificationAsync
方法返回 void
类型而不是 bool
和 string
我开发了一个 wcf ,它包含功能:
[OperationContract] public bool Authentification(string login, string mdp) DataClasses1DataContext dc = new DataClasses1DataContext(); var reqLogin = from c in dc.session where (c.login == login && c.passwd == mdp) select c;列表 listuser = reqLogin.ToList(); if (listuser.Count != 0) 返回真;否则返回假;
我想调用这些函数
【参考方案1】:
以下代码启动异步调用 - 它不返回字符串 - 这是一个 void 方法 - 这是你的错误。
client.RoleAsync(txtLogin.text,txtpass.text)
您将获得结果作为方法 client_RoleCompleted 的参数。您已使用以下代码订阅 RoleCompleted 事件:
client.RoleCompleted += client_RoleCompleted
【讨论】:
我想要两个函数的结果来测试认证 private void client_RoleCompleted(object sender, RoleCompletedEventArgs e) if (e.Result.Equals("admin") && //authentification == true (HOW !!) ??) [OperationContract] public bool Authentification(string login, string mdp) DataClasses1DataContext dc = new DataClasses1DataContext(); var reqLogin = from c in dc.session where (c.login == login && c.passwd == mdp) select c; List listuser = reqLogin.ToList(); if (listuser.Count != 0) 返回真;否则返回假; 简单的答案是 - 将其存储在某处,例如在此类的私有字段中。您也可以先调用 AuthentificationAsync 并仅在返回 true 时调用 RoleAsync。那么你就不会在任何地方存储中间结果了。【参考方案2】:解决方案是: 在第二个事件中添加胎面,例如:
void client_RoleCompleted(object sender, RoleCompletedEventArgs e)
role = e.Result.ToString();
Thread.Sleep(1000);
【讨论】:
以上是关于通过 web 服务恢复函数的结果并存储在变量中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jenkins 中通过 *** 拉取/克隆 git 存储库?