通过 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'

【问题讨论】:

看起来你的 RoleAsyncAuthentificationAsync 方法返回 void 类型而不是 boolstring 我开发了一个 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 存储库?

如何在控制器laravel 8中通过ajax传递路由链接和图像存储链接

如何在 vue.js 中通过 NeDB 的“返回”获取结果

为啥在 PHP 中通过引用传递?

如何在Nestjs中通过条件激活组件

第1课 基本数据类型