Правильно, в ответ на ответ Филиппа я остановился на одном и, возможно, нашел рабочее решение.Используя WSDL.exe, я сгенерировал интерфейсы (с помощью ключа / si) и обычных прокси-классов и добавил их в свой бизнес-проект.
Затем я создал новый класс, который наследуется отконкретный класс AND реализует интерфейс.Этот небольшой класс практически не содержал кода, поскольку унаследованные конкретные члены обеспечивали неявную реализацию членов интерфейса.Код скомпилирован впервые, и я смог заменить этот маленький класс «shim» («адаптер?») В моих интеграционных тестах и выполнить вызовы с живого стороннего сервера.
Теперь я могу создавать другиеклассы (макеты или подделки), которые реализуют интерфейс, и заменяют их вместо класса "shim".
Редактировать: ОК, я немного поработал над этим и за исключениемнесколько осложнений это работает.
Первая значительная проблема заключается в том, что прокси-классы по-прежнему помечены как «внутренние», поэтому производный класс (адаптер / прокладка) также должен быть внутренним.Это не проблема, если вы добавляете класс Factory в свой бизнес-проект / сборку, который создает прокси-классы, и возвращает их в качестве интерфейса.
Вторая найденная проблема заключалась в том, что мы устанавливали URLи свойства тайм-аута веб-службы в явном виде, но они не включены в интерфейс, вместо этого они наследуются от System.Web.Services.Protocols.WebClientProtocol через SoapHttpClientProtocol.Опять же, я имел дело с этим на заводе, так как это деталь реализации, которой я доволен, не в интерфейсе.
Редактировать: Это все еще хорошо работает для меня при тестировании и разработке нашего Фасада,С тех пор как я получил прокси-интерфейс за интерфейсом, я также создал класс декоратора журналирования, который захватывает множество примеров вызовов для отладки использования и когда сторонний сервер отключен.
Я написал то, что ясделал чуть более подробно здесь: http://www.flowerchild.org.uk/archive/2010/09/21/mocking-or-faking-or-maybe-stubbing-a-wsdl-exe-soap.html