Asp.net中的异步Web服务

如何在asp.net中设置异步Web服务?

我想调用web服务将一些数据发布到数据库,但我不关心响应是否失败或成功。

我只能使用.net 2.0或3.5,它可以是vb或c#。

在visual studio中创建服务引用时,单击“高级…”按钮并选中“生成异步操作”。 然后,您可以选择对Web服务进行异步调用。

以下是对公共Web服务的同步和同一异步调用的示例。

// http://wsf.cdyne.com/WeatherWS/Weather.asmx?wsdl using(var wf = new WeatherForecasts.WeatherSoapClient()) { // example synchronous call wf.GetCityForecastByZIP("20850"); // example asynchronous call wf.BeginGetCityForecastByZIP("20850", result => wf.EndGetCityForecastByZIP(result), null); } 

可能BeginXxx调用BeginXxx而不对结果做任何事情,因为你不关心它。 你实际上会泄漏资源。 重要的是每个BeginXxx呼叫都与相应的EndXxx呼叫匹配。

即使你有一个调用EndXxx的回调,这是在一个线程池线程上触发的,并且一旦BeginXxx调用完成,它就可以自由地完成调用BeginXxx的原始线程(它不会等待响应)。

Web服务通常用于请求/响应样式服务。 也就是说,有一种简单的异步实现机制: http : //msdn.microsoft.com/en-us/library/aa480516.aspx 。 有一些方法可以解雇并忘记webservices: http : //blogs.x2line.com/al/archive/2007/05/21/3108.aspx使用SoapDocumentMethod上的OneWay属性。

听起来没有任何理由说Web服务必须是同步的。 去异步以获得最佳性能,特别是如果某些任务可能长时间运行。