Имя: Пароль:
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);
И далее читаю…
Этот способ работает, но если кто подскажет более грамотный способ буду весьма благодарен.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший