提高单个WebService的超时时间

4

我的Web配置如下:

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

对于大多数Web服务功能来说这是可以接受的,但有一个函数的查询运行时间非常长(5分钟),并且会在完成之前被停止。是否可能仅为此Web服务设置运行时间为5分钟?

例如:

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

我考虑过异步运行数据库查询(发送并忘记),但是通过ODBC似乎不可能实现sybase/oracle。


@Carra:你得到了问题的答案吗?如果是这样,请标记答案。 - KMån
3个回答

12

可以这样做。在web.config中,您需要添加一个<location/>元素:

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

<location/>元素为您提供一种机制,可以将web.config属性应用于站点中特定的路径。


我忘记提到了:<location/>元素的path属性使您能够将该元素中包含的设置本地化到您指定的特定文件或路径! - Richard
那会改变我所有的 Web 服务函数。我只想更改一个 Web 函数,例如“MyWebServices.asmx?op=WS_DoLongQuery”。 - Carra
抱歉,您最初的帖子说“是否可以仅为此Web服务设置运行时为5分钟?”而不是特定的Web方法。我从未尝试在路径属性中指定查询字符串-您尝试过吗? - Richard

2
您可以在您的 Web 服务中使用代理来异步调用另一个方法。在此方法中,您可以进行数据库 IO 操作。这意味着在操作完成之前,您将返回给调用方。但是,如果您生成唯一 ID 并存储与该 ID 相关的任何信息,则可以在以后检索它。

我尝试使用QueueUserWorkItem(或fire and forget委托)启动操作,这很好用。但是,如果查询时间超过5分钟,我想确保线程停止。 - Carra

-1
你有检查过 Web 服务的 .Timeout 属性吗?

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


从文档中得知:"表示XML Web服务<b>客户端</b>等待同步XML Web服务请求完成的时间(以毫秒为单位)"。 - Carra
@Carra:抱歉,如果我误解了。我假设客户端像MyWebServices.asmx?op=WS_LongMethod这样调用您的Web服务,因此如果您正在使用代理来调用Web服务方法,则可以使用此超时设置。 - KMån
我知道,我们已经在客户端设置了超时时间。对于那个长查询函数,我们只是在客户端将超时时间设置为5分钟。 - Carra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接