我继承了一些代码,在处理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次左右,所以它不像服务器变得非常陷入困境或任何东西,似乎更像是设置不正确的东西
提前感谢您的帮助!
答案 0 :(得分:1)
请发布您看到的完整异常,包括所有InnerException。例如:
try {
using (CandidateService svc = new CandidateService()) {
svc.CandidateAdd();
}
}
catch (Exception ex) {
string what_I_should_post = ex.ToString();
}
您可能认为这很明显,但堆栈跟踪可能是一个很大的线索。
然后,您将想要确定此超时发生时服务正在执行的操作。它可能正在执行一个数据库操作来“添加”“候选” - 操作是否在服务器端成功?然后,您可能想要找出花费这么长时间的内容。
带有派生类的结构是我以前从未见过的,但这是一个好主意。这可能不是问题。我不会在调试过程中弄乱这些代码,但如果您对它有疑虑,请将代码从一个类复制到另一个类中。这样,它们都具有相同的WebRequest参数。