Возврат объекта из веб-сервиса - PullRequest
0 голосов
/ 30 декабря 2008

Как я могу вернуть объект из веб-службы:

[WebMethod] public DataSet GetVendors (строка базы данных) { SqlConnection sqlConn = new SqlConnection ();

        sqlConn.ConnectionString = GetConnString(Database);

        // build query
        string strSQL = @"  SELECT      [No_] AS [VendorNo],
                                        LTRIM([Name]) AS [VendorName]

                            FROM        [********_$Vendor]

                            WHERE       LEN(RTRIM([Name])) > 0 /* avoid blank names */

                            AND         [Vendor Posting Group] = 'VEND'

                            ORDER BY    LTRIM([Name]) ASC; /* LTRIM fixes spaces before name */ ";

        SqlDataAdapter da = new SqlDataAdapter(strSQL, sqlConn);

        DataSet ds = new DataSet();

        da.Fill(ds, "Vendors");

        return (ds);
    }

Ответы [ 6 ]

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

Если я правильно интерпретирую ваш вопрос, заполните объект на вашем конце информацией в DataSet и установите тип возврата на object. Или просто верните объект, который вы заполнили, как этот объект.

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

Возвращение наборов данных IMO из ваших веб-сервисов - не самая лучшая идея. Предполагается, что клиенты понимают структуры данных и классы Dataset, DataTable и т. Д. Вместо этого я рекомендую использовать простой объект CLR, т.е. объекты передачи данных, или, если хотите, можете использовать XmlNode в качестве типа данных. Вы можете защитить свой веб-сервис с помощью WSE.

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

Другая причина не возвращать DataSet - «утечка абстракции»: зачем выставлять клиента на все, что связано с уровнем персистентности? Переосмыслить.

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

Мне кажется хрупким. Предполагается, что клиент будет знать, как десериализовать этот объект, который блокирует клиента на определенной платформе (например, Java EE или .NET).

Сериализация XML менее хрупка, потому что она не зависит от платформы и оставляет клиенту безошибочные причуды. Я бы порекомендовал это при возврате объекта.

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

Если вы спрашиваете, как вернуть любой тип объекта, а не Object, то вам нужно будет сериализовать этот объект. Если вы пытаетесь сериализовать DataSet, я бы предложил сначала превратить его в List или другую структуру данных.

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

Альтернативой может быть возвращение набора данных xml в виде строки и создание набора данных из него на стороне клиента.

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

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