我有一个 Web 服务,希望从我的 asp.net 类中调用。我可以成功地调用我的 Web 服务。但现在我需要异步调用此服务。我需要调用它并且不等待服务完成执行。我不需要处理来自服务的响应,也不需要验证服务是否成功执行。我只想能够调用服务并自由地做其他事情。
我有一个 Web 服务,希望从我的 asp.net 类中调用。我可以成功地调用我的 Web 服务。但现在我需要异步调用此服务。我需要调用它并且不等待服务完成执行。我不需要处理来自服务的响应,也不需要验证服务是否成功执行。我只想能够调用服务并自由地做其他事情。
您需要异步调用Web服务。 请前往并检查。
AddServiceReference -> Advance -> generate asynchronous operations.
在这个异步回调后,每个方法都会为你提供事件。假设你的服务中有ABC方法,当你同步消耗它时,这些方法将在你的应用程序中可用。
1>ABC (fire and wait for output)
2>ABCAsync(fire and forget)
3>ABC callback event(get fired <if ABCAsync is called> when data available in your application)
实现"发射并忘记"方法的一种方式是使用在OperationContract
属性上使用IsOneWay
属性,如下所示:
[OperationContract(IsOneWay=true)]
public void SomeMethod(string someValue);
http://msdn.microsoft.com/en-us/library/bb885132(v=vs.110).aspx
这是另一种方法来实现它,看看吧。
PerformTaskAsync()
的代码。你确定它确实是异步执行的吗? - Robert Harveyusing
块包装调用PerformTaskAsync()
的对象,这似乎有问题。您要么在任务完成之前离开using
块的作用域,要么等待任务完成后再离开using
块的作用域,两者都不可取。您是否考虑过将整个操作分离成自己的线程,或使用BackgroundWorker
?或者使用async
await
? - Robert HarveyIsOneWay=true
吗?http://msdn.microsoft.com/zh-cn/library/system.servicemodel.operationcontractattribute.isoneway(v=vs.110).aspx - Tim