Тайм-аут Ошибки, возникающие при вызове веб-службы в c # .Net 2.0 - PullRequest
0 голосов
/ 17 июня 2009

Я унаследовал некоторый код, и я не очень знаком с веб-сервисами. Вот как настроен проект:

В разделе «Веб-ссылки» есть ссылка на веб-службу, которую мы используем. В файле Reference.cs этого сервиса есть класс, который наследуется от SoapHttpClientProtocol, у этого класса есть функция CandidateAdd (), которая вызывает this.Invoke (я думаю, что это делает фактический вызов веб-метода)

Затем два класса наследуются от одного в файле Reference.cs (один для производственной среды и один для dev), и они содержат только переопределение GetWebRequest (Uri), здесь он устанавливает

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

и возвращает объект веб-запроса.

Характер приложения таков, что этот веб-метод, вероятно, будет вызываться только 50 или около того раз в день, поэтому сервер не слишком загружен или что-то в этом роде, похоже, что что-то настроено неправильно .

Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 18 июня 2009

Пожалуйста, опубликуйте полное исключение, которое вы видите, включая все InnerException. Например:

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

Вы можете подумать, что это очевидно, но трассировка стека может быть большой подсказкой.

Затем вы захотите выяснить, что служба делает во время этого тайм-аута. Вероятно, выполняется операция с базой данных для «добавления» «кандидата» - успешно ли выполняется операция на стороне сервера? Затем вы можете попытаться выяснить, что занимает так много времени.

Структура с производными классами - это то, чего я раньше не видел, но это хорошая идея. Это, вероятно, не проблема. Я не стал бы связываться с этим кодом во время отладки, но если у вас есть сомнения по этому поводу, временно скопируйте код из одного класса в другой. Таким образом, они оба будут иметь одинаковые параметры WebRequest.

...