Возврат пользовательского объекта из веб-службы занимает много времени, поэтому

Когда мой веб-сервис возвращает пользовательский объект (содержащий только четыре строки, три целых и тип 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) Если вы используете консольное приложение с подключенным отладчиком, обратите внимание, что это может привести к снижению производительности в худшем случае. Попробуйте запустить без отладчика.

Другие вопросы по тегам