C# Asp.net中的异步Web服务

C# Asp.net中的异步Web服务,c#,asp.net,vb.net,web-services,C#,Asp.net,Vb.net,Web Services,如何在asp.net中设置异步web服务 我想调用Web服务将一些数据发布到数据库,但我不在乎响应是否失败或成功 我只能使用.net 2.0或3.5,它可以是vb或c#。听起来没有任何理由认为web服务必须是同步的。异步以获得最佳性能,特别是当某些任务可能长时间运行时。Web服务通常用于请求/响应样式的服务。这就是说,有一种简单的机制来执行异步实现:。也有一些方法可以直接启动和忘记Web服务:在SoapDocumentMethod上使用属性 在visual studio中创建服务引用时,单击“高

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

我想调用Web服务将一些数据发布到数据库,但我不在乎响应是否失败或成功


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

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

Web服务通常用于请求/响应样式的服务。这就是说,有一种简单的机制来执行异步实现:。也有一些方法可以直接启动和忘记Web服务:在SoapDocumentMethod上使用属性

在visual studio中创建服务引用时,单击“高级…”按钮并选中“生成异步操作”。然后,您可以选择对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);
}
下面是对公共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
调用都与相应的
EndXxx
调用相匹配


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

我认为您的意思是“异步”。为什么希望它是异步的?是因为调用简单的web服务对您来说不够快吗?我想记录一些事情,但我不想让我正在做的事情减慢用户的体验。因此,如果这个web服务出了问题或由于某种原因速度较慢,我希望主web应用程序继续运行。如果这是异步的或同步的,我想这样做。异步肯定是你想要的。我编辑了您的帖子以反映您的意图。您是通过javascript调用web服务服务器端还是客户端?调用web服务的页面是否需要等待web服务的响应?听起来您想要的是异步http请求(AJAX)。查找XmlHttpRequest。jQuery有一个很好的API可以帮助您。如果您使用Ajax,您的页面将不必等待web服务的响应。我以前使用过jquery Ajax方法,但我需要能够从服务器端调用web服务。我可以在服务器端使用XmlHttpRequest吗?@Smartcaveman,这个答案,或者更具体地说,后面的vomments,真的不能回答这个问题。Guanome正在询问如何从c#客户端异步调用web服务。XmlHttpRequest和jQuery的答案不适合这里。这是一个很好的信息,但它指的是实现一个异步web服务。guanome询问了异步调用web服务的问题。明白了。我是从web服务方面看到的。我想4杯啤酒是一个太多的问题,无法回答@gbvb,抓住这个答案,我相信正确的问题会出现。:-)异步实现web服务不太常见,也不总是有益的。web服务的服务器端执行一些操作并返回结果。使用上面提到的技术,可以将操作分解为多个部分,如果服务依次等待其他资源(如长db调用、另一个web服务调用),这将非常有用。异步web服务也非常适合实现长轮询。还要注意,在使用web服务时,某些环境(如.NET)同时提供同步和异步调用,但其他环境(如JavaScript)仅提供异步调用,甚至其他环境(如ColdFusion)仅提供同步调用。对如何创建上面提到的方法进行了详细介绍。@gbvb发布