|
Пространство имен при записи XDTO | ☑ | ||
---|---|---|---|---|
0
HomoAlbus
15.10.14
✎
16:10
|
Добрый день! Обмениваюсь со сторонним веб сервисом. Создал ws определение и ws прокси.
Вызываю метод веб сервиса - получаю ошибку. Выяснили, что проблема с пространством имен. У меня: <soap:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <getList xmlns="http://test_service.ru/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <param>test</param> </getList> </soap:Body> </soap:Envelope> А нужно: <soap:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://test_service.ru/"> <soap:Header/> <soap:Body> <int:getList> <param>test</param> </int:getList> </soap:Body> </soap:Envelope> Другими словами, нужно пространство имен из GetList перенести в soap:Envelope. А как это сделать, если 1С сам генерирует soap уровень? |
|||
1
tridog
15.10.14
✎
16:38
|
(0) С точки зрения стандарта приведенные фрагменты xml идентичны. Т.е. любой xml parser должен разобрать их одинаково. Уверен, что проблема в этом?
Если уверен - кажется, что способов повлиять на форматирование xml при использовании WSПрокси нет. Тогда остается вместо WSПрокси самому слать HTTP-запросы. Т.е. самому формировать xml через ЗаписьXML и передавать его в качестве тела в HTTPЗапрос. Правда тогда придется самому разбирать ответ. |
|||
2
DmitrO
15.10.14
✎
16:39
|
В первом и во втором варианте элемент getList находится в одном пространстве имен, и оно "http://test_service.ru/"
В первом варианте оно там, потому что объявляется xmlns="http://test_service.ru/" - пространство имен по умолчанию (когда элемент не квалифицирован префиксом). Во втором варианте, благодаря объявлению xmlns:int="http://test_service.ru/" - для этого пространства имен определяется префикс int, но элемент getList там квалифицирован как раз этим префиксом. А вот вложенный в него элемент param не квалифицирован, оответственно в первом варианте он в пространстве имен по умолчанию, а это "http://test_service.ru/"; а во втором варианте, оно не определено совсем. |
|||
3
tridog
15.10.14
✎
16:45
|
(2) Если тип свойства однозначно определен схемой - то зачем его квалифицировать?
|
|||
4
HomoAlbus
15.10.14
✎
17:06
|
Тут мне еще вариант предложили, оставить как есть и заменить только:
<param>test</param> на: <param xmlns="">test</param> Есть ли возможность при создании xdto как-то явно указать для вложенного элемента xmlns? |
|||
5
Chikko
15.10.14
✎
17:18
|
Сталкивался с такой же проблемой. Получилось решить только "собиранием" хмл вручную. Может кто-нибудь подскажет более простой способ?
|
|||
6
Serginio1
15.10.14
✎
17:21
|
||||
7
Chikko
15.10.14
✎
17:25
|
(6) Спасибо, буду читать!=)
|
|||
8
HomoAlbus
15.10.14
✎
17:34
|
(6) Какой-то уж очень замороченный способ...
|
|||
9
Serginio1
15.10.14
✎
17:36
|
(8) И чего там замороченного? Создать библиотеку 1 минута, написать код даже быстрее чем в 1С зная NET.
|
|||
10
HomoAlbus
15.10.14
✎
17:49
|
(9) Я пролистал весь тред и никак не могу понять как сие можно к данной проблеме применить?
|
|||
11
Serginio1
15.10.14
✎
17:58
|
(10) Там смысл такой, что нужно создать клиента WCF
API IE из 1с 7.7 |
|||
12
oleg_km
15.10.14
✎
18:03
|
(10) Смысл такой, что в .NET гораздо более приспособлен к работе с сервисами, а http://files.rsdn.ru/19608/FilesForNetObjectToIDispatch.zip - компонента, которая связывает сборку .NET и 1С. Ну это очень схематично и коротенько. Т.е. в ограниченной по возможностям 1С можно использовать безграничные возможности .NET. Я уже пользую больше года и не мыслю, как можно без этого
|
|||
13
Serginio1
15.10.14
✎
18:09
|
(12) Кстати в новой версии исправил метод
public object СоздатьКлиентаWCFConfigFile(string ИмяФайла, object TChannel, string endpointConfigurationName, object endpointAddress=null,string UserName=null, string Password=null) { ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); fileMap.ExeConfigFilename = ИмяФайла; Configuration newConfiguration = ConfigurationManager.OpenMappedExeConfiguration( fileMap, ConfigurationUserLevel.None); Type ТипКанала = ТипДляСоздатьОбъект(TChannel); Type type = typeof(ConfigurationChannelFactory<>); Type constructed = type.MakeGenericType(ТипКанала); dynamic factory1 = System.Activator.CreateInstance(constructed, endpointConfigurationName, newConfiguration, AutoWrap.ПолучитьРеальныйОбъект(endpointAddress) ); if (!String.IsNullOrWhiteSpace(UserName)) { factory1.Credentials.UserName.UserName = UserName; factory1.Credentials.UserName.Password = Password; } // new ConfigurationChannelFactory<ICalculatorChannel>( // "endpoint1", // newConfiguration, // new EndpointAddress("http://localhost:8000/servicemodelsamples/service")); return AutoWrap.ОбернутьОбъект(factory1.CreateChannel()); } Добавив =UserName и Password API IE из 1с 7.7 |
|||
14
oleg_km
15.10.14
✎
18:14
|
(13) У меня нет работы в веб-сервисами. У меня больше всякие системные вещи: сокеты, ком-порты, бинарные файлы, прямой доступ к скулю и пр. Кстати, большой блок по GDI+, рисую карты Яндекс гораздо быстрее, чем посредством HTML
|
|||
15
HomoAlbus
15.10.14
✎
18:16
|
(13) Нда, этому делу я точно ума не дам. Придется видимо писать в xml, а потом заменой "param" на "param xmlns=""" менять. А тот xml что получиться по HTTP отправлять...
|
|||
16
Serginio1
15.10.14
✎
18:19
|
(14) Ясно
|
|||
17
Serginio1
15.10.14
✎
18:25
|
(14) Кстати работая с ЭДИ пришлось заняться кодогенерацией из xsd.
Вот этот лучше всех разобрал https://wscfblue.codeplex.com/ https://wscfblue.codeplex.com/discussions/544680 Кстати здесь про подпись API IE из 1с 7.7 |
|||
18
Serginio1
15.10.14
✎
18:27
|
17+ API IE из 1с 7.7
|
|||
19
oleg_km
15.10.14
✎
18:56
|
(17) Так в .NET подписи не по ГОСТ, а у меня только с ЭСФ. У Крипто-ПРО есть сборка для криптографии по ГОСТ, но они за нее денег просят, в принципе 1С-овская устраивает.
|
|||
20
Serginio1
15.10.14
✎
19:04
|
(19) Ну если поскать на просторах инета то можно найти и по ГОСТУ например
http://code.google.com/p/flashcards-wp7/source/browse/Crypto/BouncyCastle/src/crypto/engines/GOST28147Engine.cs |
|||
21
oleg_km
15.10.14
✎
19:09
|
(20) Ну вопрос, будет ли это совместимо с ключевыми носителями Крипто-ПРО? Да и вообще-то противоречит законодательству: стойкие криптопровайдеры могут разрабатывать только разработчики, лицензированные ФСБ.
Ну и задачи нет все переписать на .NET. Только то, что не работает, отсутствует или гораздо проще сделать на .NET. В остальном пусть 1С тоже что-то делает. |
|||
22
Serginio1
16.10.14
✎
10:43
|
Кстати а в 1С появилась функция цифровой подписи по ГОСТу?
У меня девчонки подписывают через сайт, а значит есть СОМ библиотеки подписи. Меня просто заинтересовал алгоритм подписи, так как он должен быть открытым http://habrahabr.ru/post/136022/ |
|||
23
oleg_km
16.10.14
✎
13:54
|
(22) На 8.2 целый объект - МенеджерКриптографии. На сайте например у лерадаты вроде java-applet, но у разработчика криптопровайдера - Крипто-ПРО есть и COM и .NET-сборка. Алгоритм открытый, но на разработку конкретной реализации нужна лицензия, типа ФСБ проверит: не сделал ли ты закладки.
|
|||
24
Serginio1
16.10.14
✎
16:54
|
(23) Спасибо, чего то я его пропустил
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |