Проблемы с получением возвращенного сложного объекта из вызова метода сервиса - PullRequest
2 голосов
/ 02 октября 2009

(Нет, это не то же самое, что мой последний пост, я пытаюсь здесь что-то отличное от типа var)

Я прошел по методу, который я вызвал из своей ссылки на веб-сервис. Я прошел через это на самом деле прямо в .asmx и обратно. Это определенно возвращает действительный завершенный объект типа ServiceAuthResponse. Вот моя оболочка метода .asmx (я удалил всю логику для публикации простоты ... просто посмотрите, что она возвращает ServiceAuthRequest в качестве типа здесь):

public ServiceAuthResponse IssueDebit(...)
{
    ....
    return debitResponse;
}

Я даже могу навести курсор мыши на переменную debitResponse и увидеть свойства объекта и все так же, как всегда ... поэтому объект определенно не равен нулю ... у него есть состояние, когда он возвращается во время моей отладки.

Я вызываю этот метод сервиса в коде за страницей .aspx в другом веб-проекте, который ссылается на этот веб-сервис или использует его.

Здесь вы можете увидеть пару снимков веб-сервиса в VS:

http://www.elbalazo.net/post/webservicespic1.jpg

http://www.elbalazo.net/post/webservicespic2.jpg

Так что в одном из моих методов в моем коде позади я пытаюсь вызвать и получить возвращаемый объект. В верхней части кода выделен оператор using, указывающий, что ServiceAuthResponse должен исходить из прокси-класса (поскольку в противном случае он конфликтовал бы с некоторыми другими ссылками, которые я добавил в этот веб-проект, содержащий этот класс):

using ServiceAuthResponse = WebServicesTesting.LitleService.ServiceAuthResponse;

Нет, вот в чем проблема. Я не знаю, как вполне успешно получить возвращаемый объект, который возвращает IssueDebit. Вызов IssueDebit работает, и когда я перехожу мимо точки отладки, устанавливается значение debitResponse = litleService.IssueDebit (...); и попытаться просмотреть debitResponse, я ничего не получаю. Я ничего не вижу в этом объекте.

Все, что я вижу, это: http://www.elbalazo.net/post/objectempty.jpg, означающее, что переменная debitResponse должна иметь правильное состояние, но когда я наведу курсор мыши, я не получаю ничего, кроме пространства имен.

Вот снова код, вызывающий этот метод веб-службы IssueDebit:

private void IssueDebit()
{
    ValidateFormData();
    SetState();

    if (string.IsNullOrEmpty(txtDebitAmount.Text))
        throw new NullReferenceException("Debit amount is empty");

   ServiceAuthResponse debitResponse;

    debitResponse = litleService.IssueDebit(...);

    pnlIssueDebitResults.Visible = true;

    SetIssueDebitResults(debitResponse);

}

Я делаю что-то не так в контексте того, как я должен пытаться захватить и заполнить мою переменную сложным типом, возвращающимся из вызова метода веб-службы IssueDebit?

Ответы [ 2 ]

0 голосов
/ 02 октября 2009

У класса не было никаких сеттеров в его свойствах. Вот почему я не получил никакого состояния.

Итак, я в итоге создал класс-оболочку только со свойствами. И возвращая этот класс с теми свойствами, которые установлены исходным классом.

Не знал об обоих выше, все время узнавая больше о веб-сервисах ... этот был головной болью.

0 голосов
/ 02 октября 2009

Звучит так, будто вы вернули пустой объект; чтобы понять, что нам действительно нужно увидеть сам класс. ASMX использует XmlSerializer, который сериализует общедоступные свойства и поля; так что пока у вас есть что-то вроде:

public class ServiceAuthResponse() {
    public int ID {get;set;}
    public string Name {get;set;}
}

Это должно работать нормально. Обратите внимание, что он не рассматривает специфичные для интерфейса члены, элементы только для чтения / только для записи, внутренние элементы и т. Д.

Тривиально в стороне: можно объявить и инициализировать в одной строке, но это не будет влиять на вышеприведенное (но упрощает чтение, IMO):

ServiceAuthResponse debitResponse = litleService.IssueDebit(...);

или (если хотите) в C # 3.0:

var debitResponse = litleService.IssueDebit(...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...