powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / soapc ws-addressing ищу рецепт
8 сообщений из 8, страница 1 из 1
soapc ws-addressing ищу рецепт
    #39025658
QWERiON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, есть некий вебсервер с wsdl
(нужно убрать $$$ из 3х мест в строке)

Указано, что для подключения к нему надо использовать «надежный сеанс» (ws-reliable messaging)
И указаны такие настройки для программы soapUI, чтобы потестить сервис

автор Cтавим галку WS-RM, версия 1.0, AckTo = http://www.w3.org/2005/08/addressing
• Первым шагом любого теста должен быть вызов метода Login. После него можно добавлять любые другие методы.
• Для каждого шага с иконкой SOAP -> OpenEditor или двойной клик на названии. Внизу будут закладки.
Закладка WS-RM:
o Ставим галку Enable WS-Reliable Messaging (выбираем WS-RM Version 1.0)
o Пишем AckTo: http://www.w3.org/2005/08/addressing
Закладка WS-A:
o Ставим галки: Enable WS-A Addressing (выбираем WS-A Version 200508), Add default wsa:Action, Add default wsa:To
o Пишем в ReplyTo: http://www.w3.org/2005/08/addressing

Через этот самый soapUI метод Login срабатывает т.е. сервис работает.

Теперь это мне надо сделать чтото типа клиента. Писать свой клиент с преферансом и поэтессами на каком нибудь C# не потяну, да и времени в обрез.
Пытаюсь найти какое нибудь приемлемое решение на Powershell или Python и ничего не получается.
Насколько я понимаю, все дело в пресловутом WS-A и WS-RM. Ни у кого нет готового рецепта решения, ну или хотя бы дайте направление куда копать, в сторону каких функций/библиотек смотреть?
Заранее спасибо.
...
Рейтинг: 0 / 0
soapc ws-addressing ищу рецепт
    #39025726
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QWERiONТеперь это мне надо сделать чтото типа клиента. Писать свой клиент с преферансом и поэтессами на каком нибудь C# не потяну, да и времени в обрез.

Создаёшь новый проект на C#, в Solution Explorer'е кликаешь правой кнопкой мыши на References, в контекстном меню кликаешь Add Service Reference, вводишь там адрес http://sample4.aplana.com/RseService/RseService.svc, жмёшь Ok, будут автоматически сгенерированы классы для доступа к сервису.
В коде пишешь:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
RseServiceClient client = new RseServiceClient();
client.Open();

// Здесь обращаемся к сервису
//var cities = client.GetCities();
//Console.WriteLine(cities.OutStatus);

client.Close();


Всё! Клиент написан. Я за минуту накликал.
У меня работает, только залогиниться осталось. Выдаёт UnathorizedAccess.
...
Рейтинг: 0 / 0
soapc ws-addressing ищу рецепт
    #39025801
QWERiON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik, спс за отклик. Примерно это я вчера тоже сделал. С помощью тестового клиента WCF из VS.
Но вот как раз очень бы хотелось избежать всего этого, в смысле писать свой клиент, да еще и на C#. Душа просит праздника, чего то более легковесного. Например, какого нибудь скрипта, ну или хотя бы командлета того же Powershell в котором это все можно заставить работать.
...
Рейтинг: 0 / 0
soapc ws-addressing ищу рецепт
    #39025854
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QWERiONПисать свой клиент с преферансом и поэтессами на каком нибудь C# не потяну, да и времени в обрез.
QWERiONПримерно это я вчера тоже сделал.
Честно говоря, утомило уже это. Зачем вечно пытаются оправдываться? Ну не знаешь, как использовать мощь среды разработки и полноценного языка на всю катушку, ладно. Но сочинять-то зачем?

QWERiONНо вот как раз очень бы хотелось избежать всего этого, в смысле писать свой клиент, да еще и на C#.
Что значит "писать"? Он уже написан!

QWERiONДуша просит праздника, чего то более легковесного. Например, какого нибудь скрипта, ну или хотя бы командлета того же Powershell в котором это все можно заставить работать.
И в чём проблема? Если хочется вместо нескольких кликов мышкой и минуты времени настучать тысячи ударов по клаве и потратить несколько часов времени - вперёд и с песней!
Только с фига-ли скрипт будет более легковесным? Работать он будет медленней (процессор грузить сильней), памяти жрать больше.
А то, что теоретически кода в скрипте может быть меньше, полностью нивелируется тем фактом, что в C# он генерируется, а не пишется вручную.
Праздник - это не скрипт. Праздник - это метапрограммирование, когда код не надо писать, а он генерируется.
...
Рейтинг: 0 / 0
soapc ws-addressing ищу рецепт
    #39029123
QWERiON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikЧестно говоря, утомило уже это. Зачем вечно пытаются оправдываться? Ну не знаешь, как использовать мощь среды разработки и полноценного языка на всю катушку, ладно. Но сочинять-то зачем?

Ну так я установил студию, запустил тестовый клиент WCF из нее и попробовал залогиниться. У меня получилось.
Это и значит, что "примерно тоже самое я вчера и сделал". Точно также добавил ссылку на wsdl в новый консольный проект. Полазил по сгенерированному дереву методов. Это все я вычитал при беглом чтении главы wcf у Троелсена. Собственно, это я и проделал перед обращением к "коллективному разуму".
Вот реально, если бы умел использовать среду и язык, то у меня таких проблем бы не возникло. Моя сфера деятельности далека, от сетевого программирования, я больше sql запросики пишу. На C# делал несколько малюсеньких программок и не более того, да и было это года 4 назад.

Теперь почему я не хочу "писать", да и что значит это самое "писать".
Собственно работа с данным сервисом предполагает большой объем отправляемых туда/сюда данных с достаточно сложной структурой.
Работа по подготовке всех этих структур, и заполнению их данными из базы, мне представляется адской. Возможно это из-за того, что я не знаком с инструментарием visual studio и c С# на хорошем уровне. Но это так и времени ознакомиться нет.
Собственно, почему скрипт, требований к быстродействию нет. Все будет выполняться по расписанию во внерабочее время, и пусть себе кидает данные. Да и решал я похожие задачи скриптами, есть наработки, только вот без soap и wsdl.
Мне гораздо проще средствами sql сервера и Powershell сгенерировать валидную xml-разметку и отправить куда скажут.
...
Рейтинг: 0 / 0
soapc ws-addressing ищу рецепт
    #39029830
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QWERiONВот реально, если бы умел использовать среду и язык, то у меня таких проблем бы не возникло. Моя сфера деятельности далека, от сетевого программирования, я больше sql запросики пишу.
Я всё понимаю. Посади меня писать скрипты на PowerShell, я также буду страдать. Просто иногда хочется поворчать.

QWERiONТеперь почему я не хочу "писать", да и что значит это самое "писать".
Собственно работа с данным сервисом предполагает большой объем отправляемых туда/сюда данных с достаточно сложной структурой.
Работа по подготовке всех этих структур, и заполнению их данными из базы, мне представляется адской.
В том-то и дело, что там получается полсотни классов, десяток перечислений и пара интерфейсов. Вручную всё это описывать - убиться можно. Сила SOAP/WCF как раз в том и заключается, что сервер выставляет описание своих сервисов в виде WSDL, а по нему на клиенте можно сгенерировать код автоматически.

QWERiONМне гораздо проще средствами sql сервера и Powershell сгенерировать валидную xml-разметку и отправить куда скажут.
Ой, много писать придётся.
Может, стоит рассмотреть такой вариант: сгенерированный код на C# скомпилировать в библиотеку dll, и вызывать её из скрипта? Насколько я знаю, это возможно.
Я не спец по PS, но мне кажется, это в любом случае будет проще, чем вручную всё писать.
...
Рейтинг: 0 / 0
soapc ws-addressing ищу рецепт
    #39031972
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QWERiON,

кстати, я вот ещё о чём подумал. В языке F# есть офигенно удобные Type Provider'ы. Я опробовал Microsoft.FSharp.Data.TypeProviders.WsdlService с указанным сервисом - работает! На лету создаются все необходимые типы, показываются в автоподсказке.
Беглое гугление выдаёт, что тайппровайдеры можно использовать в PowerShell.
...
Рейтинг: 0 / 0
soapc ws-addressing ищу рецепт
    #39042969
QWERiON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikQWERiONМне гораздо проще средствами sql сервера и Powershell сгенерировать валидную xml-разметку и отправить куда скажут.
Ой, много писать придётся.
На самом деле все не так страшно. Предыдущая версия данного сервиса, от других разработчиков так и работала. Скрипт который все это выполнял имел меньше 900 строк кода, это учитывая комментарии.
Я написал для каждого метода на сервере БД запрос, в котором имена столбцов соответствовали именам параметров передаваемых через функцию.
Ну и для каждого метода резализовал простейший парсер который добавлял начало и конец xml разметки, ну и тупо выводил все поля из запроса используя конструкцию вида:
Код: powershell
1.
'<' +$Line[$j] + '>'+$ss + '</' +$Line[$j] + '>'


где $Line[$j] имя столбца, а $ss соответственно содержимое полученное запросом. Все это благополучно как строка отправлялась на сервер.
Ну и далее следовала логика, которая распарсивала ответ сервера, и проставляла нужные данные в базе. Все прекрасно работало года три. Пока не сменили команду разработчиков, а новая метла по-новому метет.
petalvikМожет, стоит рассмотреть такой вариант: сгенерированный код на C# скомпилировать в библиотеку dll, и вызывать её из скрипта? Насколько я знаю, это возможно.
Я не спец по PS, но мне кажется, это в любом случае будет проще, чем вручную всё писать.
dll писать не вариант т.к. все это живет, и развивается, постоянно приходят письма о исправлении ошибок, обновлениях, новых методах и проч. т.е. нужно иметь возможность оперативно со всем этим работать, скрипт самый лучший вариант.
Да и времени нет осваивать новые технологии :) сроки поджимают.
В общем делаю все на павершеле.
Есть прогресс.
код на PowerShell
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
$proxy = New-WebServiceProxy -uri $URI -Namespace rsens -Class rse
$proxy.PreAuthenticate = $TRUE
$proxy.CookieContainer=New-Object System.Net.CookieContainer
$ns = $proxy.GetType().NameSpace  # NameSpace
Set-Alias -Name rse -Value $ns
$sd_type=($ns+'.SessionData')     # данные для логина SessionData
$sd=new-object($sd_type)
$sd.Login=$username
$sd.Password=$password
$sd.DiagnosticMode="Warnings"
$auth=$proxy.Login($sd)
$CookieCollection =$proxy.CookieContainer.GetCookies($URI)

$cities=$proxy.GetCities() # Получение списка городов
$cities.TextList |Format-Table

# Тестовая машина
$tcar_type=($ns+'.TestCarData')
$tcar=New-Object($tcar_type)
$tcar.BrandID='98'
$tcar.BrandIDSpecified="True"
$tcar.ModelID='1251'
$tcar.ModelIDSpecified="True"
$tcar.Text='My super Car'
$tcar.ID=3

$m = New-Object rsens.SetTestCarRequest
$m.TestCar=$tcar
$testCar=$proxy.ApplyTestCar($m)   #создание новой машины на сервере


В общем жить можно. Геморно, но делать нечего.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / soapc ws-addressing ищу рецепт
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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