2010-03-29 71 views
4

我的web配置如下所示:提高超时单个Web服务

<system.web> 
    <compilation debug="false"/> 
    <httpRuntime executionTimeout="90"/> 
</system.web> 

这是对大多数web服务的功能,但一个函数运行很长(5分钟)的时间查询并在完成之前停止。是否有可能将运行时间设置为5分钟来完成此Web服务?

例如为:

MyWebServices.asmx?op=WS_LongMethod --> Timeout of 5 minutes 

我想过运行的数据库查询异步(发射后不管),但它似乎可能与Sybase/Oracle不通过ODBC。

+0

@Carra:你有没有得到你的问题的答案?如果是这样,请标记答案。 – 2010-04-06 12:52:29

回答

10

是的,你可以做到这一点。在web.config中,你需要添加一个<location/>元素:

<location path="Path_To_Your_Service.asmx"> 
    <system.web> 
     <httpRuntime executionTimeout="90"/> 
    </system.web> 
</location> 

<location/>元素为您提供了一个机制,使你可以申请的web.config属性您网站上的特定路径。

+0

我忘了提及:''的路径属性可以让您将元素中包含的设置本地化为您指定的特定文件或路径! – Richard 2010-03-29 09:52:24

+0

这将改变我所有的webservice功能。我只想改变一个网页功能,例如“MyWebServices.asmx?op = WS_DoLongQuery” – Carra 2010-03-29 11:21:50

+0

对不起,您的第一篇文章中提到“是否可以将运行时设置为5分钟来完成此Web服务?” - 不是特定的Web方法。我从来没有试图在路径属性中指定查询字符串 - 你试过了吗? – Richard 2010-03-29 14:11:01

-1

您是否检查了网络服务的.Timeout属性?

指示XML Web服务客户端等待同步XML Web服务请求完成的时间(以毫秒为单位)。

+0

从文档:“指示XML Web服务客户端等待同步XML Web服务请求完成的时间(以毫秒为单位)。” – Carra 2010-03-29 12:40:58

+0

@Carra:对不起,如果我误解了。我假设一个客户端调用你的Web服务,比如'MyWebServices.asmx?op = WS_LongMethod',所以如果你使用代理来调用webservice方法,那么这个超时设置是可用的。 – 2010-03-29 13:31:22

+0

我知道,我们已经在客户端设置了暂停。对于那个长查询功能,我们只需将客户端的超时设置为5分钟即可。 – Carra 2010-03-29 14:13:24

2

您可以在您的web服务中使用委托以异步方式调用另一个方法。在这个方法中,你可以做你的数据库IO。这意味着您在操作完成之前会返回给调用者,但是如果您生成一个唯一的ID并存储与该ID相关的任何信息,则可以在以后检索它。

+0

我试着用QueueUserWorkItem(或者fire and forget delegate)启动这个操作并且工作正常。但是,如果查询花费的时间超过5分钟,我想确保线程已停止。 – Carra 2010-03-30 08:25:10