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

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

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

person mdc    schedule 05.12.2012    source источник
comment
Вы делаете какие-либо вызовы базы данных или что-то еще?   -  person Tomas McGuinness    schedule 05.12.2012
comment
Помимо того, что вы думаете, происходит что-то еще. Короче разницы быть не должно.   -  person ChrisBint    schedule 05.12.2012
comment
не могли бы вы опубликовать определение класса вашего объекта?   -  person Alex Filipovici    schedule 05.12.2012
comment
Я добавил немного кода, посмотрите, есть ли что-нибудь очевидное.   -  person mdc    schedule 05.12.2012
comment
Что, если вы вызовете метод2 перед методом1 в консольном приложении? Может быть, какой бы метод вы ни вызывали первым, он медленный, независимо от того, какой это метод?   -  person Keith    schedule 05.12.2012
comment
@Keith Поместите это в ответ, чтобы я мог отдать вам должное, вы правы :)   -  person mdc    schedule 05.12.2012
comment
Круто, я рада, что помогло!   -  person Keith    schedule 05.12.2012


Ответы (1)


Проблема может заключаться в том, что первый вызов ваших веб-сервисов занимает больше времени, чем последующие вызовы. Попробуйте изменить порядок вызовов методов службы, которые вы делаете в консольном приложении, и посмотрите, будет ли method1 по-прежнему самым медленным.

Почему первый вызов будет медленнее? Некоторые идеи: 1) В консольном приложении первый вызов метода может вызвать некоторую инициализацию в прокси-сервере веб-службы. Это может быть ваш собственный код или что-то в .NET. 2) Возможно, вы используете веб-службу после того, как IIS какое-то время простаивал, и поэтому ему приходится создавать новый рабочий процесс. 3) Если вы используете консольное приложение с подключенным отладчиком, обратите внимание, что это может привести к увеличению производительности в худшую сторону. Попробуйте запустить без отладчика.

person Keith    schedule 05.12.2012