Как я могу восстановить класс из набора данных, в который он был преобразован прокси-классом веб-служб? - PullRequest
0 голосов
/ 15 декабря 2008

Фон

Я создал веб-сервис в Visual Studio и пытаюсь использовать его, используя автоматически сгенерированный прокси-класс. Веб-служба возвращает реализованный мной класс, содержащий список.

Вопрос

Прокси-класс автоматически генерирует методы для отправки SOAP в веб-службу. Он использует метод Invoke () для выполнения вызова, а затем преобразует результат в DataSet. Как я могу вернуть этот объект в класс, который я знаю?

Я знаю, что могу вручную редактировать автоматически сгенерированный файл, но это не очень удобно для обслуживания, поэтому я не хочу идти по этому пути (каждый раз, когда веб-служба перестраивается, изменения должны быть внесены опять же).

Есть ли способ сказать сгенерированному классу, чтобы он был более конкретным и действительно использовал правильный тип данных? Или мне нужно написать неуклюжий набор десериализаторов, чтобы вернуть мои данные в правильную форму?

Пример

Один метод в моем классе веб-службы:

[WebMethod]
public UpdateList RetrieveUpdates(long sessionID, string configurationVersion, string coreVersion, string researcherDBVersion)
{ ... }

При добавлении класса в качестве веб-ссылки создается следующий прокси-метод:

public DataSet RetrieveUpdates(long sessionID, string configurationVersion, string coreVersion, string researcherDBVersion) {
    object[] results = this.Invoke("RetrieveUpdates", new object[] {
        sessionID,
        configurationVersion,
        coreVersion,
        researcherDBVersion});
   return ((DataSet)(results[0]));
}

DataSet, который я получаю от этого метода, всегда пуст (потому что вы не можете привести из моего класса в DataSet).

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 16 декабря 2008

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

Ранее я использовал этот подход для «исправления» прокси-классов (например, для добавления заголовков SOAP, которые не определены в WSDL), и хотя это и не идеально, он работает.

0 голосов
/ 15 декабря 2008

Если ваш клиентский код не знает о вашем пользовательском классе (например, имеет ссылку на сборку), вы не сможете получить объект этого типа из службы.

Звучит так, как будто вы хотите поделиться типами на уровне сервиса. Для этого вам нужно будет либо предоставить клиентскому приложению копию сборки, которая имеет UpdateList введите или вам нужно будет посмотреть что-то вроде WCF.

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