在c#.Net 2.0中调用Web服务时发生超时错误

时间:2009-06-17 15:23:56

标签: c# web-services .net-2.0 timeout

我继承了一些代码,在处理Web服务方面我并不是很熟悉。以下是项目的设置方式:

在“Web引用”下,引用了我们正在使用的Web服务。在该服务的Reference.cs文件中有一个继承自SoapHttpClientProtocol的类,该类有一个名为CandidateAdd()的函数,它调用this.Invoke(我认为这使得实际的Web方法调用)

然后两个类派生自Reference.cs文件中的一个(一个用于生产环境,一个用于开发),它们只包含GetWebRequest(Uri)的覆盖,此处设置

webRequest.KeepAlive = false;
webRequest.MaximumAutomaticRedirections = 30;
System.Net.ServicePointManager.MaxServicePointIdleTime = 18000;
webRequest.AllowAutoRedirect = true;
//webRequest.Timeout = 18000;

并返回Web请求对象。

应用程序的本质是这样的,这个web方法可能每天只调用50次左右,所以它不像服务器变得非常陷入困境或任何东西,似乎更像是设置不正确的东西

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

请发布您看到的完整异常,包括所有InnerException。例如:

try {
    using (CandidateService svc = new CandidateService()) {
        svc.CandidateAdd();
    }
}
catch (Exception ex) {
    string what_I_should_post = ex.ToString();
}

您可能认为这很明显,但堆栈跟踪可能是一个很大的线索。

然后,您将想要确定此超时发生时服务正在执行的操作。它可能正在执行一个数据库操作来“添加”“候选” - 操作是否在服务器端成功?然后,您可能想要找出花费这么长时间的内容。

带有派生类的结构是我以前从未见过的,但这是一个好主意。这可能不是问题。我不会在调试过程中弄乱这些代码,但如果您对它有疑虑,请将代码从一个类复制到另一个类中。这样,它们都具有相同的WebRequest参数。