调用Web服务时Async / Await无法正常工作

时间:2014-02-11 17:07:42

标签: vb.net web-services asynchronous

由于某种原因,我无法获得生成的[服务方法名称]任何方法的异步版本,以便在我在VB.NET中创建的Web服务中进行编译。

无论我是使用我创建的实际服务,还是使用HelloWorld和HelloWorldAsync方法的默认服务,我都会得到相同格式的错误消息。所以我显然没有做一些必要的关键。

VS 2012代码窗口中的错误消息格式为[Service MethodName]响应无法转换为[将返回的类型]。因此,对于默认的HelloWorld方法,此代码段:     导入StackOverflowClient.TestServiceReference

Public Class Form1     昏暗的SOClient作为新的TestWebServiceSoapClient

Private Async Sub SayHelloAsync()
    Label1.Text = Await SOClient.HelloWorldAsync()
End Sub

结束班

(其中StackOverflowClient是项目的名称,TestServiceReference是分配给Service的Namespace,SOClient是代理类)将错误输出消息:HelloWorldResponse不能转换为String。 (在我的实际应用程序中,消息将是GetUserResponse无法转换为我在服务中创建的用户类型。

当我尝试使用服务中的类执行此操作时,我有时也会出现“Expression not not a value”的错误消息,例如:     lblUser.Text = StaffInfoService.GetNextStaffMemberAsync()

我在“服务参考设置”中选中了“允许生成异步操作”复选框。

我看不出我错过了什么。除非我绝对必须,否则我不想使用VS2010之前的旧的Begin / Completed / Callback方法。任何使用Async / Await执行此任务的指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

听起来HelloWorldAsync正在返回Task<HelloWorldResponse>类型。当你Await时,任务是&#34;解开&#34;然后值的类型为HelloWorldResponse。如错误消息所述,您无法将其转换为字符串。也许你正在寻找那种类型的特定属性?