Имя: Пароль:
1C
Веб-мастеринг
Взаимодействие 1С 8 и веб сервиса на asp.net
0 FAR_E_R
 
13.10.11
14:10
Создал веб сервис на asp.net, вот пример функции в VS 2010

[WebMethod(Description = "Get my messages", EnableSession = false)]
public string GetMyMessagesTest(string userID)
{        
   return userID;        
}

Из 1С 8.2 вызываю его.

Сервис = WSСсылки.WSСсылка.СоздатьWSПрокси("http://...ru/", "..", "..Soap12");
Сообщение = Сервис.GetMyMessages("ELDAR");

Сообщение возвращается, все работает.

Теперь мне надо передать в 1С список. В студии делаю так

[WebMethod(Description = "Get messages", EnableSession = false)]
public DataSet GetMyMessages(string userID)
{
   // Здесь обрабатывается запрос, пропущу его.
      return dataSet;
}  

В 1С делаю так:

Сервис = WSСсылки.WSСсылка.СоздатьWSПрокси("http://...ru/", "..", "..Soap12");
Сообщение = Сервис.GetMyMessages("ELDAR").ПолучитьСписок("Table1");;

Но возникает ошибка:

Ошибка при вызове метода контекста (GetMyMessages)
   Сообщение = Сервис.GetMyMessages("123");
по причине:
Несоответствие типов (параметр номер '1')

Если посмотреть  статью Книга знаний: v8: Использование внешних web-сервисов в 1С:Предприятие 8; то там автор делает так:
СписокАэропортов=СервисАэрофлот.AirportList().ПолучитьСписок("list");
Подскажите какой тип данных необходимо возвращать из сервиса чтобы воспользоваться функцией 1С ПолучитьСписок();
Спасибо!
1 sikuda
 
13.10.11
14:19
Типы которые возвращаются из WebService это из XDTO. А затем их надо приводить в типы 1С. Примитивные типы преобразуются сразу и разницу не заметно.
2 FAR_E_R
 
13.10.11
14:28
Не подскажете пример или ссылку.
3 FAR_E_R
 
13.10.11
17:25
Для DataSet есть схема на языке XSD. Ее можно так получить dataSet.GetXmlSchema()
Вот она:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
 <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
   <xs:complexType>
     <xs:choice minOccurs="0" maxOccurs="unbounded">
       <xs:element name="Table">
         <xs:complexType>
           <xs:sequence>
             <xs:element name="name" type="xs:string" minOccurs="0" />
             <xs:element name="status" type="xs:int" minOccurs="0" />
             <xs:element name="data" type="xs:dateTime" minOccurs="0" />
           </xs:sequence>
         </xs:complexType>
       </xs:element>
     </xs:choice>
   </xs:complexType>
 </xs:element>
</xs:schema>

Далее ее надо загрузить в 1С в виде XDTO-пакета ?
4 Asmody
 
13.10.11
17:27
(3) не понимает 1Ска датасеты.
5 FAR_E_R
 
13.10.11
23:41
Поискал по форуму….  v8: Web сервис и дата сет
но не смог найти способ использовать DataSet и  ПолучитьСписок() в 1С.
Поэтому решил сделать просто, передать из веб сервиса DataSet в виде string, например так dataSet.GetXml().
В 1С вернулся следующий текст:
<NewDataSet>
 <Table>
   <name>Сообщение1</name>
   <data>2011-06-06T15:11:02+04:00</data>
 </Table>
 <Table>
   <name>Сообщение2</name>
   <data>2011-10-12T01:31:45.077+04:00</data>
 </Table>
</NewDataSet>
Его просто превращаю в xml вот так
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
И далее читаю…
Этот способ работает, но если кто подскажет более грамотный способ буду весьма благодарен.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн