|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Возникла потребность написать WS, который принимает и возвращает сообщения в формате SOAP. Пробовал создать подобный WS используя WCF, но остановился на этапе обращения к самому сервису. Насколько я понял, то клиент должен генерировать прокси-класс, чтобы из него уже вызывать необходимые методы, которые описаны в контракте. Проблема в том, что я пишу WS для уже готового ПО, которое нет возможности переписать. Эта программа просто умеет отправлять SOAP сообщения посредством POST запросов и парсить SOAP ответы, она ничего не знает о том же WSDL, к примеру. Наткнулся на тему, что можно написать HTTP WEB WCF используя атрибуты [WebGet] и [WebInvoke], но этот способ, как я понял дает возможность обмена обычным XML или JSON, что не подходит мне. Я, конечно, могу сделать ручную сериализацию в SOAP, но это будет не столь красиво. В старых ASMX было все проще. Были просто методы и при обращении к странице веб сервиса сразу было описание формата SOAP и REST запросов, которые можно отправить обычным POST. При этом можно было генерировать те же прокси клиенты и юзать их в коде. Что-то подобное мне нужно на WCF в связи с тем, что старые добрые веб сервисы по словам MSDN являются устаревшей технологией. Может посоветует кто-то как решить подобную задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2012, 13:49 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
yesnoms, ну че? сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2013, 16:57 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
yesnoms, Я правильно понял и клиент и сервис в бинарниках, изменить их возможности нет, но сервис хочется переписать? Привет, если клиент удовлетворяет полностью SOAP, то сделать будет не сложно. Клиенту не обязательно делать проксю, равно как и сервису все равно, откуда пришло SOAP сообщение, можешь хоть просто поцепиться к нему telnet 127.0.0.1 80 и скопипастить туда сообщение SOAP request'а. Тебе нужно сделать следующее. Каким нибудь нетворк монитором снять трафик с клиента когда он работает со старым сервисом, понять структуру сообщений (дата контрактов)/методов (сервис контрактов) по их тексту. Создать свой WCF сервис с wsHttpBinding'ом или еще там был для старых ASMX, какой из них пользовать поймешь из предыдущего пункта. С помощью DataContract/DataMember, ServiceContract/OperationContract определить форматы сообщений твоего сервиса. Благо они умеют переименовывать проперти/методы, неймспейсы и т. п.. Тебе также надо будет определить всякие штуки типа InstanceContextMode. Можно также на уровне меседжа работать и т. п.. С большой вероятностью поийдется косить под старый ASMX. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 18:55 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
в всф тоже можно налету сгенерировать прокси ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 20:48 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
так как я ток начал разбираться в wcf, хотелось бы узнать как люди это делают с малой кровью и универсально для всех видов сервисов ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 20:50 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
ViPRosв всф тоже можно налету сгенерировать прокси в WCF вообще много чего можно 1) сгенерить проксю а) оставив как есть б) подсунув совершенно другие классы на клиенте и с помощью DataContract/DataMember, ServiceContract/OperationCon выпрямив их так, чтобы до клиента доходило то, что он хочет. другое дело за чем это может понадобиться. 2) не генерить проксю и пользоваться ровно теми же определениями контракта, что и на сервере через Shared сборку каждому подходу свое применение... может быть еще что-то можно. так не вспомню. --- Да, вы правы, если сервер предоставляет что-то вроде MexEndpoint или включено <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> то сгенерить можно по старому сервису клиентскую проксю и его потом имплементировать аналог на сервере, и тогда старый клиент подхватит. Но этого может быть отключено в целях безопасности, а если оно не в конфиге а захардкодили, то см. подход выше. В конце дня мозг был забит потому я полез в горло через анус, упустив тот факт что сервис то старый на руках есть. Но подход выше ему пригодиться если metadata exchange отключен. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 23:34 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Lord British, а как генерить прокси к чужому сервису, если mex отключен? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 23:42 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
пардон, опечатка [QUOTE] б) подсунув совершенно другие классы на клиенте и с помощью DataContract/DataMember, ServiceContract/OperationCon выпрямив их так, чтобы до сервера доходило то, что он хочет. другое дело за чем это может понадобиться. [QUOTE] ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 23:44 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
ViPRosLord British, а как генерить прокси к чужому сервису, если mex отключен? Если есть доступ к голому каналу и работающая пара Сервер/клиент то можно заняться педальным реверсом руками как написано здесь 13780620 . Если mex отключен и есть только сервер и нет доступа к каналу и/или работающего клиента, то у меня нет других идей кроме как за денежку купить у разрабов wsdl и по нему сгенерить проксю с помощью кажется svcutil.exe Если и разрабы не продают то никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 23:49 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Lord British, это плохо :( ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2013, 23:58 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Если ничего не помогло и известно что или сервер или клиент написан под .NET. Есть вариант взять рефлектор и выколупать оттуда контракт сервиса и датаконтракты :) даже если сборка обфусцирована, по атрибутам OperationContract/ServiceContract DataMember/DataContract с любезно предоставленными именами методов/полей в виде строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:00 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Lord British, ладно тут книжку какую то нашел, хвалят все может там что есть ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:05 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Даже в случае такого можешь восстановить контракт. Могут быть иерогливы и т. п.. Дерзай короче. Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:08 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
ViPRosLord British, ладно тут книжку какую то нашел, хвалят все может там что есть Автор как-то Лёва Жуваль у книжки? А что не ясно из сказанного. В книжке по твоей проблеме нового особо не найдешь. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:11 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Lord British, да все ясно ясно что МС свой бредовой типизацией замахал уже ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:18 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
непонятно вот что я отключаю mex просто в хосте не стал содздавать ендпойнт для мех и в сервисе убрал в апп.конфиг ендпойнт но все равно все парсится и прокси генерируется значит мех включается автоматически???? тогда все ок ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:31 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
ViPRos, ааа не везде отключал :( сцуки, гады позорные ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2013, 00:47 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 22:51 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
МСУ, ну зарегился, вопрос то важный а там фигня надо что бы не было ClientProxy ссылка на нее из Client ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 01:17 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
ViPRosМСУ, ну зарегился, вопрос то важный а там фигня надо что бы не было ClientProxy ссылка на нее из Client Я тебя что, заставляю регаться? Название темы почитай, подумай. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 14:46 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
МСУ, в названии написано - БЕЗ ПРОКСИ, т.е. никаких референсов, интерфейсов и т.д. упоминаний о сервисе, знаем только точку доступа ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 15:11 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
ViPRosМСУ, в названии написано - БЕЗ ПРОКСИ, т.е. никаких референсов, интерфейсов и т.д. упоминаний о сервисе, знаем только точку доступа У меня в коде тоже никаких референсов типов соап. Ты че тупишь? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 16:50 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
МСУ, у тебя в коде клиента описание интерфейса IService ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 17:44 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 17:46 |
|
SOAP коммуникация в WCF без использования прокси клиента
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 17:52 |
|
|
start [/forum/topic.php?fid=19&msg=38118496&tid=1397120]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 161ms |
0 / 0 |