2011-09-02 2 views
0

Я хотел бы реплицировать данный веб-сервис для целей моделирования. Основная идея заключается в том, что новый сервис реализует тот же интерфейс, что и существующий (который я никак не контролирую), но с различными реализацией реальных методов. Тогда я хотел бы иметь возможность перенаправлять запрос на реальный адрес или на смоделированный в определенных условиях тестирования без необходимости изменения конфигураций. Можно ли это сделать в WCF?WCF WebService Replication

ответ

2

С точки зрения фактически тиражирование услугу, если существующая служба предоставляет метаданные, то есть WSDL, то вы можете восстановить службу по существу, выполнив следующие действия:

  1. Обзор к WSDL и все XSD о том, что wsdl ссылки и сохранить их все на диск.
  2. С этими файлами запустите утилиту wsdl.exe, передав ей wsdl и xsd, и используйте параметр/si для создания сервисного интерфейса.
  3. Выход, который будет файл интерфейса (с # файл)
  4. Перейти в Visual Studio и создайте новый проект «Service Application WCF»
  5. Переименуйте начальный Service1 (и интерфейс) файлов и классов к имя вашего нового сервиса и интерфейса.
  6. Скопируйте и вставьте код интерфейса, сгенерированный выше, в файл класса интерфейса новой службы.
  7. В классе службы внедрите методы службы с любой желаемой реализацией. (СОВЕТ: если вы щелкнете правой кнопкой мыши по имени интерфейса в файле, вы можете использовать опцию «Использовать интерфейс», чтобы иметь VS-заглушку для вас - хорошая функция.)
  8. Постройте его, и вы должны быть готовы к работе.

С точки зрения переключаясь между оригиналом и новой службой, я полагаю, один вариант был бы на стороне клиента ссылки на различные endponts службы в коде (в сравнении конфигурации), и таким образом, вы можете просто переключить переключатель ударить один сервис или другое ...

0

без изменения конфигурации

Это будет громоздким.

Вы можете создать сервис с идентичным интерфейсом, а затем реализовать клиент для вызова «реальной» службы в вашей службе.

Затем в каждом вызове вы делаете то, что хотите, и после этого вы перенаправляете запрос с теми же (или измененными) параметрами в реальный сервис.

Но тогда вам придется указывать своих клиентов на службу, а не на реальный сервис. Возможно, эту часть можно было бы обойти, используя прокси-сервер или DNS-запись.