Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Раскрыть DataSet в SOAP / 3 сообщений из 3, страница 1 из 1
19.07.2006, 18:41
    #33865141
ras
ras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Раскрыть DataSet в SOAP
Есть Web Service, в нем функция, получающая параметры, один из которых должен быть DataSet, т.е. SOAP запрос должен выглядеть:

POST /TestService/Service1.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/TestService/Service1/ProviderSync"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ProviderSync xmlns="http://tempuri.org/TestService/Service1">
<username>string</username>
<password>string</password>
<ProviderRecords>
<Provider>
<ProviderID>int</ProviderID>
<Status>string</String>
<Contact>
<ContactName>string</ContactName>
<Status>string</String>
</Contact>
<Contact>
<ContactName>string</ContactName>
<Status>string</String>
</Contact>
</Provider>
</ProviderRecords>
</ProviderSync>
</soap:Body>
</soap:Envelope>

т.е. 3 параметр ProviderRecords - DataSet. Создаю типизированный датасет, он в SOAP отображается как
<ProviderRecords>dataset</ProviderRecords>

В WSDL подцепляется .xsd, а не разбивка по элементам.

Пишу Web-сервис первый раз, помогите кто может.
...
Рейтинг: 0 / 0
11.08.2006, 01:47
    #33911898
ras
ras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Раскрыть DataSet в SOAP
Долго ждал ответа, пришлось искать самому. DataSet в .net нет раскроешь. Почему, можно почитать на http://searchwebservices.techtarget.com/tip/0,289483,sid26_gci1048679,00.html.

Одно из решений - создавать массив из элементов класса, потом на клиенте его загружать в DataSet.
...
Рейтинг: 0 / 0
11.08.2006, 04:57
    #33911937
dotnetcoder
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Раскрыть DataSet в SOAP
2ras:Одно из решений - создавать массив из элементов класса, потом на клиенте его загружать в DataSet

Проще говоря пихаем DataSet -> XmlDataDocument -> string -> byte[]

и толкаем на веб сервис где просто берём строку и считываем напрямую в DataSet.

Пример :

Берём в качестве заготовки это http://www.aspnetmania.com/Articles/Article/13.html

добавляем в WebServicesExample\nw.asmx.cs :

        [WebMethod]
        public void PushXml(byte [] xmlContent)
        {
            DataSet ds = new DataSet();
        
            ds.ReadXml(new StringReader(System.Text.Encoding.ASCII.GetString(xmlContent)));

            ds.WriteXml(@"C:\Projekte\WebServicesExample\ds.xml");            
        }


а в WebServiceWinClient\Form1.cs заменяем btnOrders_Click н этот метод :

        private void btnOrders_Click(object sender, System.EventArgs e)
        {
            
            WebServiceWinClient.localhost.NorthWindWebService orders = new WebServiceWinClient.localhost.NorthWindWebService();
            DataSet ds = orders.GetCustOrders(txtClient.Text);
            dgMain.DataSource = ds;
            
            orders.PushXml(System.Text.Encoding.ASCII.GetBytes(new XmlDataDocument(ds).OuterXml));            
        }


В результате в C:\Projekte\WebServicesExample\ds.xml нахожу :

<?xml version="1.0" standalone="yes" ?>
- <NewDataSet>
- <Orders>
<OrderID>10643</OrderID>
<OrderDate>1997-08-25T00:00:00.0000000+02:00</OrderDate>
<RequiredDate>1997-09-22T00:00:00.0000000+02:00</RequiredDate>
<ShippedDate>1997-09-02T00:00:00.0000000+02:00</ShippedDate>
</Orders>
- <Orders>
<OrderID>10692</OrderID>
<OrderDate>1997-10-03T00:00:00.0000000+02:00</OrderDate>
<RequiredDate>1997-10-31T00:00:00.0000000+01:00</RequiredDate>
<ShippedDate>1997-10-13T00:00:00.0000000+02:00</ShippedDate>
</Orders>
- <Orders>
<OrderID>10702</OrderID>
<OrderDate>1997-10-13T00:00:00.0000000+02:00</OrderDate>
<RequiredDate>1997-11-24T00:00:00.0000000+01:00</RequiredDate>
<ShippedDate>1997-10-21T00:00:00.0000000+02:00</ShippedDate>
</Orders>
- <Orders>
<OrderID>10835</OrderID>
<OrderDate>1998-01-15T00:00:00.0000000+01:00</OrderDate>
<RequiredDate>1998-02-12T00:00:00.0000000+01:00</RequiredDate>
<ShippedDate>1998-01-21T00:00:00.0000000+01:00</ShippedDate>
</Orders>
- <Orders>
<OrderID>10952</OrderID>
<OrderDate>1998-03-16T00:00:00.0000000+01:00</OrderDate>
<RequiredDate>1998-04-27T00:00:00.0000000+02:00</RequiredDate>
<ShippedDate>1998-03-24T00:00:00.0000000+01:00</ShippedDate>
</Orders>
- <Orders>
<OrderID>11011</OrderID>
<OrderDate>1998-04-09T00:00:00.0000000+02:00</OrderDate>
<RequiredDate>1998-05-07T00:00:00.0000000+02:00</RequiredDate>
<ShippedDate>1998-04-13T00:00:00.0000000+02:00</ShippedDate>
</Orders>
- <OrderDetails>
<ProductName>R?ssle Sauerkraut</ProductName>
<UnitPrice>45.6000</UnitPrice>
<Quantity>15</Quantity>
<Discount>0.25</Discount>
<OrderID>10643</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Chartreuse verte</ProductName>
<UnitPrice>18.0000</UnitPrice>
<Quantity>21</Quantity>
<Discount>0.25</Discount>
<OrderID>10643</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Spegesild</ProductName>
<UnitPrice>12.0000</UnitPrice>
<Quantity>2</Quantity>
<Discount>0.25</Discount>
<OrderID>10643</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Vegie-spread</ProductName>
<UnitPrice>43.9000</UnitPrice>
<Quantity>20</Quantity>
<Discount>0</Discount>
<OrderID>10692</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Aniseed Syrup</ProductName>
<UnitPrice>10.0000</UnitPrice>
<Quantity>6</Quantity>
<Discount>0</Discount>
<OrderID>10702</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Lakkalik??ri</ProductName>
<UnitPrice>18.0000</UnitPrice>
<Quantity>15</Quantity>
<Discount>0</Discount>
<OrderID>10702</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Raclette Courdavault</ProductName>
<UnitPrice>55.0000</UnitPrice>
<Quantity>15</Quantity>
<Discount>0</Discount>
<OrderID>10835</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Original Frankfurter gr?ne So?e</ProductName>
<UnitPrice>13.0000</UnitPrice>
<Quantity>2</Quantity>
<Discount>0.2</Discount>
<OrderID>10835</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Grandma's Boysenberry Spread</ProductName>
<UnitPrice>25.0000</UnitPrice>
<Quantity>16</Quantity>
<Discount>0.05</Discount>
<OrderID>10952</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>R?ssle Sauerkraut</ProductName>
<UnitPrice>45.6000</UnitPrice>
<Quantity>2</Quantity>
<Discount>0</Discount>
<OrderID>10952</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Escargots de Bourgogne</ProductName>
<UnitPrice>13.2500</UnitPrice>
<Quantity>40</Quantity>
<Discount>0.05</Discount>
<OrderID>11011</OrderID>
</OrderDetails>
- <OrderDetails>
<ProductName>Flotemysost</ProductName>
<UnitPrice>21.5000</UnitPrice>
<Quantity>20</Quantity>
<Discount>0</Discount>
<OrderID>11011</OrderID>
</OrderDetails>
</NewDataSet>
-- Если тебе помогли, незабудь сказать спасибо --
-- Это всё мое личное мнение которое может не совпадать с Вашим или может быть ошибочным --

.NetCoder
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Раскрыть DataSet в SOAP / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]