SOAP客户端没有完成它的工作或者可能没有返回任何东西?

时间:2014-07-10 08:10:56

标签: c# winapi soap windows-runtime async-await

我在Windows RT中使用SOAP客户端,我正在使用Windows 8.1操作系统和VS 2013.无论如何,我想要做的只是一个简单的任务,它会返回一些字符串值。

当我尝试等待 - 异步任务时它不会返回任何内容或者它只是简单地失去了自己试图找到客户端。我找不到问题。

我添加了服务引用,当我在对象浏览器中查看它时似乎没有问题。我知道为什么会这样吗?

这是我的代码:

using Namespace.InfoGetter;

private void btn_Click(object sender, RoutedEventArgs e)
{
    Info info = GetInfo("en-US");
    txtInfo.Text = info.Result.Value;
}

async Task<Info> GetInfo(string culture)
{
   InfoSoapClient client = new InfoSoapClient();
   Task<InfoResponse> info = client.GetInfoAsync(culture); <<<<<<<<<<<

   Info result = await info;

   return result;

}

当调试到达该行时(我放置&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;怎么办?

1 个答案:

答案 0 :(得分:1)

由于您的代码示例不准确,我假设发生的事情是您有死锁,因为您在info.Result等待时阻止了GetInfo试图将工作编组回你的UI线程。

我们将async关键字添加到您的按钮点击事件处理程序和await上的GetInfoAsync

试试这个:

private async void btn_Click(object sender, RoutedEventArgs e)
{
    Info info = await GetInfoAsync("en-US");
    textInfo.Text = info.Value
}

private Task<Info> GetInfoAsync(string culture)
{
    InfoSoapClient client = new InfoSoapClient();
    return client.GetInfoAsync(culture);
}

注意我在GetInfo方法中添加了Async后缀以遵循TAP约定并从async中删除GetInfoAsync关键字,因为您实际上并不需要生成额外的状态机返回是返回结果而不是用它做额外的工作。