|
1С и WS на C# | ☑ | ||
---|---|---|---|---|
0
san4o
07.03.12
✎
08:54
|
Всех приветсвтую!
Есть простой веб-сервис на C#, у которого метод принимает строку(string) и пишет ее в базу. Пытаюсь этот веб-сервис вызвать из 1C - получаю ошибку: {Форма.Форма.Форма(557)}: Ошибка при вызове метода контекста (TestMethod) ПроксиКласс.TestMethod(Сообщение); по причине: Несоответствие типов (параметр номер '1') Код вызова следующий: //определяем веб сервис по wsdl описанию ОпределениеВебСервиса = Новый WSОпределения("http://localhost:59820/EBECService.asmx?WSDL"); //Создание прокси для обращения в веб сервису ПроксиКласс = Новый WSПрокси(ОпределениеВебСервиса,"http://tempuri.org/", "Service1", "Service1Soap"); Фабрика = ПроксиКласс.ФабрикаXDTO; //СОздание объекта и вызов Сообщение = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "string")); Сообщение="Привет из 1С!"; ПроксиКласс.TestMethod(Сообщение); |
|||
1
pessok
07.03.12
✎
09:35
|
(0) вестимо TestMethod имеет первым параметром нечто отлично от строки
|
|||
2
san4o
07.03.12
✎
09:38
|
Код метода:
[WebMethod] public void TestMethod(string input) { dataManager.TestInsert(input); } |
|||
3
pessok
07.03.12
✎
09:49
|
а если закомментить
Сообщение = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "string")); ? |
|||
4
pessok
07.03.12
✎
09:51
|
В общем так
Сообщение = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "string"));// создал объект Сообщение="Привет из 1С!"; // уничтожил объект и создал константу строковую Зачем? Затык именно в этом, хлебом не корми |
|||
5
sda553
07.03.12
✎
09:56
|
(4) Верно, но при вызове метода TestMethod если этот метод действительно принимает параметр типа string "http://www.w3.org/2001/XMLSchema" то 1С его преобразует как надо.
Я сомневаюсь что метод TestMethod принимает тип string wsdl описание этого сервиса в студию! |
|||
6
san4o
07.03.12
✎
10:05
|
Пробовал закомментить создание из фабрики - не помогает. WSDL в студию:
<?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> <s:element name="TestMethod"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="input" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="TestMethodResponse"> <s:complexType /> </s:element> </s:schema> </wsdl:types> <wsdl:message name="TestMethodSoapIn"> <wsdl:part name="parameters" element="tns:TestMethod" /> </wsdl:message> <wsdl:message name="TestMethodSoapOut"> <wsdl:part name="parameters" element="tns:TestMethodResponse" /> </wsdl:message> <wsdl:portType name="Service1Soap"> <wsdl:operation name="TestMethod"> <wsdl:input message="tns:TestMethodSoapIn" /> <wsdl:output message="tns:TestMethodSoapOut" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="Service1Soap" type="tns:Service1Soap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="TestMethod"> <soap:operation soapAction="http://tempuri.org/TestMethod" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="Service1Soap12" type="tns:Service1Soap"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="TestMethod"> <soap12:operation soapAction="http://tempuri.org/TestMethod" style="document" /> <wsdl:input> <soap12:body use="literal" /> </wsdl:input> <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="Service1"> <wsdl:port name="Service1Soap" binding="tns:Service1Soap"> <soap:address location="http://localhost:59820/EBECService.asmx" /> </wsdl:port> <wsdl:port name="Service1Soap12" binding="tns:Service1Soap12"> <soap12:address location="http://localhost:59820/EBECService.asmx" /> </wsdl:port> </wsdl:service> </wsdl:definitions> |
|||
7
sda553
07.03.12
✎
11:20
|
Попробуй так:
//определяем веб сервис по wsdl описанию ОпределениеВебСервиса = Новый WSОпределения("http://localhost:59820/EBECService.asmx?WSDL"); //Создание прокси для обращения в веб сервису ПроксиКласс = Новый WSПрокси(ОпределениеВебСервиса,"http://tempuri.org/", "Service1", "Service1Soap"); Фабрика = ПроксиКласс.ФабрикаXDTO; //СОздание объекта и вызов Сообщение = Фабрика.Создать(Фабрика.Тип("http://www.w3.org/2001/XMLSchema", "TestMethod")); Сообщение.Добавить("Привет из 1С!"); ПроксиКласс.TestMethod(Сообщение); |
|||
8
sda553
07.03.12
✎
11:22
|
ой не то, ошибка в одной строчке
//определяем веб сервис по wsdl описанию ОпределениеВебСервиса = Новый WSОпределения("http://localhost:59820/EBECService.asmx?WSDL"); //Создание прокси для обращения в веб сервису ПроксиКласс = Новый WSПрокси(ОпределениеВебСервиса,"http://tempuri.org/", "Service1", "Service1Soap"); Фабрика = ПроксиКласс.ФабрикаXDTO; //СОздание объекта и вызов Сообщение = Фабрика.Создать(Фабрика.Тип("http://tempuri.org/", "TestMethod")); Сообщение.Добавить("Привет из 1С!"); ПроксиКласс.TestMethod(Сообщение); |
|||
9
san4o
07.03.12
✎
11:53
|
Урра! Спасибо! Заработало, только вместо
Сообщение.Добавить("Привет из 1С!"); сделал: Сообщение.input="Привет из 1С!"; Всем спасибо! Теперь вроде понял как оно работает:) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |