Xamarin表示WCF异步调用String函数的void返回

时间:2016-06-18 10:35:22

标签: c# wcf asynchronous xamarin.forms

我试图在Xamarin Forms的WCF服务中调用一个简单的Login函数。

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

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

Service1Client client = new Service1Client();

我的服务功能名称是Login并返回一个String。这是定义:

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 with void":

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

我做错了什么?

如果我删除了await语句,WCF函数会正确执行并返回"测试"字符串,但我不知道如何在Xamarin Forms上检索它。

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

谢谢。

1 个答案:

答案 0 :(得分:2)

我终于找到了解决方案。

我需要将一个侦听器函数设置为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

希望这有助于某人。