Тип, передаваемый через веб-сервис, не распознается потребляющим кодом - PullRequest
1 голос
/ 22 марта 2012

Я создаю веб-службу XML, которая передает массив пользовательских типов. В моем коде потребления я ссылаюсь на код как на веб-ссылку, которой я дал пространство имен MYWS. Теперь в коде я пытаюсь присвоить результаты вызова моего веб-сервиса массиву моего типа следующим образом:

 'instance to make a call to my web service
 Dim srv As New MYDWS.ServiceNameWSSoapClient
 'array to hold the results                           
 Dim arr() As MyClass
 'assign the web service call results
 arr = srv.myWebMethod()

Когда я делаю это, комплимент жалуется, говоря:

Значение 1-мерного массива my.namespace.MyClass не может быть преобразуется в одномерный массив my.namespace.MYWS.MyClass, потому что my.namespace.MYSW.MyClass не является производным от my.namespace.MyClass

Теперь я понимаю сообщение, дело в том, что они одного класса. Класс объявлен в моем коде вызова веб-службой, ссылающейся на DLL из этого проекта. Как мне сказать компилятору, что это один и тот же тип? Любая помощь будет очень высоко ценится. Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

В результате возникает несоответствие пространства имен. Если вы щелкнете правой кнопкой мыши по MyClass в своем примере и выберете «Перейти к определению», куда он вас приведет? Я подозреваю, что вы можете оказаться в локально определенном классе.

Решение состоит в том, чтобы изменить

Dim arr() As MyClass

до

Dim arr() As MYWS.MyClass

Обновление на основе информации в комментариях

Проблема с использованием веб-службы заключается в том, что вы не можете привести его к локальному классу.

У вас есть несколько вариантов, в зависимости от того, что именно вам нужно из местного класса.

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

Namespace MYWS

    Public Partial Class MyClass

        Public Property SomeAdditionalData As String

        Public Sub SomeMethod
           ' Perform some operations on the class members
        End Sub
    End Class

End Namespace

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

В качестве другого варианта, если у вас есть контроль над веб-службой, вы можете изменить ее на службу WCF. Это позволит вам повторно использовать один и тот же код класса на обоих концах канала связи.

0 голосов
/ 26 июня 2015

Нашел решение проблемы.В файле web.config я обнаружил следующее:

<add key="net.mydom.mydom" value="http://localhost:7452/dir/mysvc.asmx"/>

, которое автоматически вводила система при регистрации веб-службы.Я получил сообщения об ошибках на экране, но все скомпилировано и работает без проблем.

Когда я вручную переключился на это:

<add key="net.mydom" value="http://localhost:7452/dir/mysvc.asmx"/>

Сообщения об ошибках исчезли, и все продолжало функционировать, как и ожидалось.

(На это потребовались только 7 летout ...)

ОБНОВЛЕНИЕ:

Ну, не совсем исправление, но оно должно быть близко.Через некоторое время проблема вернулась, когда я переключился на:

<add key="net.mydom.mydom" value="http://localhost:7452/dir/mysvc.asmx"/>

он снова ушел ... обязательно вернуться в любое время ...

ОБНОВЛЕНИЕ

Если я явно добавлю:

imports net.mydom

в начало моего кода, сообщение снова исчезнет (даже если я явно использовал полный net.mydom. При вводе переменных.

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