Возврат пользовательского объекта из веб-службы занимает много времени, поэтому
Когда мой веб-сервис возвращает пользовательский объект (содержащий только четыре строки, три целых и тип bool), это занимает несколько секунд (4-8 секунд). Когда один и тот же сервер отправляет одну и ту же информацию в строке, он отправляется практически мгновенно.
Класс пользовательских объектов определяется в том же веб-сервисе, если это имеет значение.
Я не думал, что это будет иметь большое значение, или я упустил что-то фундаментальное здесь?
Изменить: некоторый код, я удалил некоторые переменные для облегчения чтения.
Пользовательский класс, определенный в веб-сервисе:
public class AddressSearchResult
{
public AddressSearchResult()
{
Address = String.Empty;
Country = String.Empty;
}
public AddressSearchResult(string address, string country)
{
Address = address;
Country = country;
}
public string Address { get; set; }
public string Country { get; set; }
}
Единственное различие между двумя WebMethods в веб-сервисе - это оператор return:
WebMethod1 возвращает объект
return new AddressSearchResult((string)address["address"], (string)address["country"]);
WebMethod2 возвращает только строку (просто чтобы показать, что я делаю то же самое здесь)
return new AddressSearchResult((string)address["address"], (string)address["country"]).Address;
Приемная сторона, консольное приложение:
AddressSearchResult result = adrSerWS.method1("example", "yehaa"); //THIS IS SLOW
string result2 = adrSerWS.method2("example", "yehaa"); //THIS IS FAST
1 ответ
Проблема может заключаться в том, что первый вызов ваших веб-служб занимает больше времени, чем последующие вызовы. Попробуйте изменить порядок вызовов методов службы, которые вы делаете в консольном приложении, и посмотрите, method1
по-прежнему самый медленный.
Почему первый звонок будет медленнее? Некоторые идеи: 1) В консольном приложении первый вызов метода может вызвать некоторую инициализацию в прокси веб-службы. Это может быть ваш собственный код или что-то в.NET. 2) Возможно, вы подключаетесь к веб-службе после того, как IIS какое-то время простаивал, и, следовательно, ему приходится создавать новый рабочий процесс. 3) Если вы используете консольное приложение с подключенным отладчиком, обратите внимание, что это может привести к снижению производительности в худшем случае. Попробуйте запустить без отладчика.