Как получить веб-сервис для сериализации / десериализации одного и того же типа в .net - PullRequest
1 голос
/ 22 октября 2008

Я хочу использовать типизированные параметры в веб-методах. Но когда Visual Studio 2005 создает веб-ссылку для клиента, он автоматически создает свои собственные типы. Я использую веб-сервис .net и клиент .net.

Например:

_ Открытая функция Foo () как ServerNamespace.Bar ... Конечная функция

у клиента метод становится WebServiceInstance.Foo () as ClientNamespace.Webservice.Bar

возвращая другой тип.

Я начал писать свой собственный класс помощника сериализации для преобразования типа, но я бы подумал, что будет лучший способ ....

Ответы [ 4 ]

3 голосов
/ 22 октября 2008

Если вы можете перейти на .Net 3.0, я бы предложил перейти на WCF для вашего клиентского прокси. Svcutil.exe - это инструмент для создания клиентского прокси WCF из веб-службы; у него есть опция / ссылка, которая берет сборку и повторно использует любые общие типы из нее. (Я бы также предложил переключить службу на WCF, если она находится под вашим контролем: -))

Если вы не можете обновить, wsdl.exe имеет параметр / sharetypes, который может вам помочь, хотя я не уверен, как именно это сделать.

0 голосов
/ 07 ноября 2008

Я обновился до VS 2008 и WCF. Я все еще нахожу решение наполовину испеченным. Общие типы работают нормально, если они не являются типизированными коллекциями, которые преобразуются в массив или список (Of T).

Я действительно не понимаю, что такого сложного в сериализации с одним и тем же типом объекта, коллекцией или другим способом.

Несколько человек ссылаются на эту статью из Code Project (статья)

, который работает для некоторых объектов, но для моих объектов данных генерирует следующие предупреждения (если я заставлю его использовать DataContractSerializer):

Предупреждение: необязательное расширение WSDL элемент 'body' из пространства имен «http://schem as.xmlsoap.org/wsdl/soap12/ 'не было обрабатываются. XPath: // wsdl: определений [@targetNamespace = 'http://tempuri.org/']/wsdl:binding[@ name =' WSHttpBinding_IService '] / wsdl: операция [@ name =' GetData '] / wsdl: output

Я не смог найти ничего значимого, что помогло бы мне отладить это.

0 голосов
/ 22 октября 2008

Здесь также есть хороший ответ: .NET SOAP Распространенные типы

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

0 голосов
/ 22 октября 2008

Я задавал тот же вопрос раньше, поэтому ответы, которые я получил, могут помочь:

Заставить веб-сервис .NET использовать класс локальных объектов, а не прокси-класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...