Vb.net 调用web服务时异步/等待不起作用
由于某些原因,我无法在VB.NET中创建的web服务中编译任何方法的生成的[Service Method Name]异步版本 无论我使用的是我创建的实际服务,还是带有HelloWorld和HelloWorldAsync方法的默认服务,我都会收到相同格式的错误消息。所以我显然没有做一些关键的事情 VS 2012代码窗口中错误消息的格式为[Service MethodName],无法将响应转换为[Type that will returned]。因此,对于默认HelloWorld方法,以下代码段: 导入StackOverflowClient.TestServiceReference 公开课表格1 Dim SOClient作为新的TestWebServiceSoapClientVb.net 调用web服务时异步/等待不起作用,vb.net,web-services,asynchronous,Vb.net,Web Services,Asynchronous,由于某些原因,我无法在VB.NET中创建的web服务中编译任何方法的生成的[Service Method Name]异步版本 无论我使用的是我创建的实际服务,还是带有HelloWorld和HelloWorldAsync方法的默认服务,我都会收到相同格式的错误消息。所以我显然没有做一些关键的事情 VS 2012代码窗口中错误消息的格式为[Service MethodName],无法将响应转换为[Type that will returned]。因此,对于默认HelloWorld方法,以下代码段:
Private Async Sub SayHelloAsync()
Label1.Text = Await SOClient.HelloWorldAsync()
End Sub
末级
(其中StackOverflowClient是项目的名称,TestServiceReference是分配给服务的命名空间,SOClient是代理类)将出错并显示消息:HelloWorldResponse无法转换为String。(在我的实际应用程序中,消息将是GetUserResponse,但无法将其转换为我在服务中创建的用户类型
当我尝试使用服务中的类执行此操作时,有时也会收到错误消息“Expression不生成值”,例如:
lblUser.Text=StaffInfo服务.GetNextStaffMemberAsync()
我在服务引用设置中选中了“允许生成异步操作”复选框
我看不出我错过了什么。我不想使用VS2010之前较旧的开始/完成/回调方法,除非我必须这样做。任何使用Async/Await完成此任务的指针都将非常感谢。听起来像是
HelloWorldAsync
正在返回一种类型的任务它表示,任务是“展开”的,值的类型是HelloWorldResponse
。正如错误消息所述,您无法将其转换为字符串。也许您正在寻找该类型的特定属性?谢谢Stephen。您是对的,它返回的是HelloWorldResponse类型。当您说“正在查找该类型的特定属性”,你是指HelloWorldResponse类型吗?如果是,那就是我的问题所在,因为我在Intellisense中没有看到我希望web方法返回的实际类型。(在我的实际项目中,服务中有一个StaffMember类型。我猜它从响应中提取StaffMember类型是因为我遗漏了一些东西。是的,我指的是HelloWorldResponse
类型。你是说你的服务器只是返回一个StaffMember
类型吗?如果是,它是否被恰当地定义为[DataContract]
?不,您认为它返回响应类型是正确的-在实际项目中,它是GetNextStaffMemberResponse。我可以在对象浏览器中看到此类型具有属性,例如Body,但我不知道如何提取GetNextStaffMemberAsync应该返回的StaffMember实例使用服务器的GetNextStaffMember方法,该方法成功返回我可以使用的StaffMember实例,但自动生成的异步版本返回GetNextStaffMemberResponse。听起来好像WCF在某个地方出错或配置错误。请尝试在新的WCF服务中创建一个最小的复制。我使用的是旧的ASP.NET web服务。是吗这就是我的错误所在?