Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 调用web服务时异步/等待不起作用_Vb.net_Web Services_Asynchronous - Fatal编程技术网

Vb.net 调用web服务时异步/等待不起作用

Vb.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方法,以下代码段:

由于某些原因,我无法在VB.NET中创建的web服务中编译任何方法的生成的[Service Method Name]异步版本

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

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

公开课表格1 Dim SOClient作为新的TestWebServiceSoapClient

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服务。是吗这就是我的错误所在?