【问题标题】:Xamarin Forms WCF Async Call void return on a String functionXamarin Forms WCF 异步调用 void 返回字符串函数
【发布时间】:2016-06-18 10:35:22
【问题描述】:

我正在尝试从 Xamarin Forms 调用 WCF 服务中的简单登录函数。

我已经毫无问题地引用了该服务。

我已经这样定义了客户端对象:

Service1Client client = new Service1Client();

我的服务函数名称是 Login 并返回一个字符串。这是定义:

Public Function Login(ByVal wUser As String, ByVal wPassword As String) As String Implements IService1.Login
    Return String.Format("Test")
End Function

当我尝试从 Xamarin Forms ServiceClient 对象调用该函数时,我只能访问 LoginAsync 函数而不是 Login。研究了一下,我发现我必须将 await 与异步函数一起使用。

我试过了,但该行显示错误“Can't use await with void”:

await client.LoginAsync("user", "password");

我做错了什么?

如果我删除 await 语句,WCF 函数将正确执行并返回“Test”字符串,但我不知道如何在 Xamarin Forms 上检索它。

如何检索函数试图返回的字符串?

谢谢。

【问题讨论】:

  • 你试过"string value = await client.LoginAsync("user", "password");"
  • 是的,我已经尝试过了,但是等待“不能使用 await with void”的错误仍然存​​在。我不明白这一点,因为我的函数是字符串类型而不是无效的。如果我删除 await 那么错误是“无法从 void 转换为字符串”。
  • LoginAsync 方法的签名是什么?它可能需要一个回调方法而不是使用异步。

标签: c# wcf asynchronous xamarin.forms


【解决方案1】:

我终于找到了解决办法。

我需要为 LoginCompleted 事件分配一个监听器函数。

  client.LoginCompleted += client_LoginCompleted;
  client.LoginAsync("user", "password");

然后我可以在该函数的 EventArgs 中得到结果

 static void client_LoginCompleted(object sender, LoginCompletedEventArgs e)
    {
        var result = e.Result;
    }

这是帮助我了解异步调用在 WCF 中的工作原理以及获取结果的三种可能方式的链接。

http://jaliyaudagedara.blogspot.com.es/2013/03/asynchronous-operations-in-wcf.html

希望这对某人有所帮助。

【讨论】:

  • 绝对帮了我,谢谢,但是为什么 Login 方法不可用,为什么只有 loginasync 方法我们应该访问任何想法?
猜你喜欢
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多