Веб-сервис .NET, использующий экземпляр типа параметра? - PullRequest
1 голос
/ 11 октября 2008

У меня есть проект форм Windows и проект веб-службы в моем решении, и я пытаюсь вызвать веб-сервис и вернуть в результате объект клиента. Проблема в том, что когда я пытаюсь получить возвращаемый объект, я получаю сообщение об ошибке, что он не может его преобразовать. Например, вот подпись для моего веб-сервиса:

Public Function GetDriverByID(ByVal DriverID As Integer) As Driver

А вот код, который я использую для его вызова:

    Dim d As Driver = mywebserviceinstance.GetDriverByID(1)

Но я получаю эту ошибку времени компиляции (wsDrivers - это имя веб-ссылки, добавленной в проект формы): «Значение типа ProjectNamespace.Common.wsDrivers.Driver невозможно преобразовать в ProjectNamespace.Common.Driver «

Это «общее» пространство имен содержит класс Driver, и я не уверен, почему класс возврата из веб-службы - это не просто универсальный «Driver», а вместо этого «wsDrivers.Driver», и я могу не конвертируй обратно. Кто-нибудь знает, как я могу справиться с этим несоответствием типов?

РЕДАКТИРОВАТЬ: Спасибо за объяснения - это на самом деле проясняет, что он делает. Тем не менее, есть ли способ, которым я могу заставить его использовать фактический тип вместо прокси (или, скорее, есть ли способ конвертировать между «реальным» экземпляром и «прокси»), или я должен сериализовать свойства до того, как я отправлю их по проводам, а затем вручную десериализовать возвращаемые значения?

Ответы [ 2 ]

2 голосов
/ 11 октября 2008

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

Однако вы, вероятно, также ссылаетесь на ту же библиотеку, что и веб-служба, которая содержит тот же тип. Это тип, который ожидается, когда вы Dim Driver. Вот почему существует несоответствие.

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

Ссылка на веб-службу в проекте VB.NET или C # может ссылаться на любой тип веб-службы и не ограничивается теми, которые предоставляются ASP.NET. Вот почему Visual Studio создает прокси-классы для каждого объекта, которые можно получить из веб-службы.

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