Возврат методом Web-сервиса объекта (.net/c#)

Тема в разделе ".NET", создана пользователем *null, 5 июн 2007.

Статус темы:
Закрыта.
  1. *null

    *null Гость

    Здравствуйте!

    Есть Serializable-структура данных (включает не только встроенные типы) которую должен возвращать метод Веб-сервиса. Со службой работает .NET клиентское Windows-приложение, которое также располагает описанием этой структуры.

    Если в клиентском приложении объявляю объект этой структуры и пытаюсь его инициализировать вызовом метода сервиса, при компиляции возникает ошибка «Cannot implicitly convert type». Если же объявляю объект через прокси-класс Web-сервиса при вызове метода приложение виснет (хотя если возвращать другой тип или ничего – все нормально, т.е. ошибки в коде метода сервиса вроде нет).

    Как правильно возвратить объект из метода Web-службы и поймать его на клиенте. Можно ли как-то обойтись без сериализации/преобразования к byte[]? Если все же нет, как можно проще осуществить такое приведение, учитывая то, что в структуре есть члены не встроенных типов?

    Спасибо!
     
  2. *null

    *null Гость

    Уточню. Структуры имеют вид вроде:

    [Serializable]
    public struct A
    {
    public string SomeString;
    public Int32 SomeInteger;
    ...
    public DateTime CurrentDate;
    };

    [Serializable]
    public struct B
    {
    public A;
    public byte[] SomeByteArray;
    };


    Метод Веб-сервиса возващает экземпляр B. Как такое можно сериализовать? И можно ли обойтись без сериализации в этом случае?
     
  3. Pasha

    Pasha Гость

    Для: *null
    Можно ли передать объект с использованием текстового протокола SOAP без использования сериализации == можно ли передать объект в последовательном виде без преобразования в последовательный вид.
    А вообще B должен нормально возвращатся из веб-сервиса, только не в виде B, а в виде прокси mywebservice.B. Из за этого у тебя ошибка "Cannot implicitly convert type" и возникает.
    А насчет подвисаний - что-то вы там неправильно делаете (с). Выложи исходник.
     
  4. *null

    *null Гость

    Да, Pasha, к моему сожалению, вы правы. ) Ошибка "Cannot implicitly convert type" так и вылечилась.

    А вот с подвисанием хуже...
    Если вкраце, то в этом методе Web-сервиса производится вызов функции из моей C#-DLL-ки, которая выполняет кое-какие крипто-операции (с кучей вызовов PInvoke).

    Если вызываю этот метод Web-сервиса из браузера - все нормально, возвращается нужное мне значение (сейчас для упрощения возвращается string и результат могу проверить прям в окне ie).

    Но если пытаюсь вызвать этот метод из WindowsApplication, происходит его (апликейшена) подвисание. Подвисает из-за той самой крипто-ф-ии из моей DLL-ки, т.е. насколько я понимаю метод WS доходит до ее вызова и ... висяк. Соответственно WindowsApplication ждет завершения метода и висит.

    DLL-ка врядли в этом виновата, т.к. уже еще пользовал с вызовом тех же ф-ий, но из WindowsApplication и все было нормально.

    Почему может быть так, из браузера вызов происходит нормально, а из WindowsApplication приводит к зависанию при вызове методом ф-ии DLL-ки?
     
  5. Pasha

    Pasha Гость

    Для: *null
    Должно одинаково работать. теоретически. И web service и крипто dll-ку вполне можно отладить, тем более что исходники есть. Открываешь web service в студии, делаешь debug/attach to process, цепляешься к aspnet_wp или w3wp, ставишь breakpoint, жмешь каппу в приложении...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей