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

  • Автор темы *null
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

*null

Гость
#1
Здравствуйте!

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

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

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

Спасибо!
 
N

*null

Гость
#2
Уточню. Структуры имеют вид вроде:

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

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


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

Pasha

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

*null

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

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

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

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

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

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

Pasha

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