超时调用webservice但数据传输仍然完成

时间:2009-03-13 18:44:49

标签: asp.net web-services timeout

我正在从网页调用我的web服务并在我的web.config文件中设置非常高的值时获得超时。当文件通常非常大但 但文件仍然完全上载 时(如果不发生超时DID),这会间歇性地发生。这是我的.aspx文件中的一个函数,它调用我的ASMX代理类:

 private void UploadFile(HttpPostedFile postedFile, string fileNameOnly)
{
    // create an instance of the proxy class to talk to our service; calling it client:
    string strURI = string.Empty;
    WSproxyProject.ASMXProxy.FileService client = new WSproxyProject.ASMXProxy.FileService();
    try
    {
        BinaryReader b = new BinaryReader(postedFile.InputStream);
        byte[] binData = b.ReadBytes(numBytes);
        strURI = client.UploadFile(binData, fileNameOnly, binData.Length);
        txtURI.Text = strURI;
        LogText("SUCCESS: " + fileNameOnly + " has been uploaded. URI=" + strURI);
    }
    catch (Exception ex)
    {
    LogText("UPLOAD ERROR: " + ex.Message.ToString());

    }
}

请注意,我在localhost上的Web服务会调用另一个实际存储最终数据的Web服务。我在以下所有地方的web.config中都有以下executionTimeout设置:

  1. 我的Web客户端项目上的web.config(myWebService的调用者)
  2. myWebService上的web.config(vendorWebService的调用者)
  3. vendorWebService上的web.config(驻留在我局域网中的另一台服务器上)

  4. 上面代码块捕获的异常显示ex.Source为System.Web.Services,ex.Message为:

    操作已超时

2 个答案:

答案 0 :(得分:1)

如果在方法中设置Web服务超时长度会发生什么?

...
WSproxyProject.ASMXProxy.FileService client = new WSproxyProject.ASMXProxy.FileService();
    client.Timeout = 9999999;
    try
    ...

也许您还需要为FileService使用的其他Web服务设置类似的超时属性。

我必须为使用功能不足的开发数据库的Web服务调用执行此操作。我宁愿让一个Web服务准备执行超过需要的时间而不是抛出异常。

祝你好运。

答案 1 :(得分:0)

一些头脑风暴:

  • 您是否考虑过哪个网络服务或客户端超时?堆栈跟踪显示什么?
  • 每个人都会在稍微不同的时间开始这个过程。他们有相同的超时时间吗?
  • 文件是否完整?它可能是正确的大小,但会被破坏。
  • 我知道这听起来很傻,但是有一个永无止境的循环或循环比你想象的更长吗?

希望有一些帮助。