Я не думаю, что здесь есть какие-либо проблемы с производительностью, и код выглядит легко для работы с точки зрения владельцев кода.
Моя большая проблема в том, что с точки зрения потребителей не совсем ясно, как работает ваша услуга. Им придется полагаться на отдельную документацию или сообщения об ошибках.
Для кого-то, кто не знаком с вашим кодом (т. Е. Только что загрузил WSDL), было бы намного проще использовать ваш сервис, если бы требуемые параметры были объявлены. Вы также получаете хорошую степень проверки из коробки.
Для иллюстрации:
[OperationContract]
DoSomethingResult DoSomething(DoSomethingContext context)
против
[OperationContract]
[FaultContract(typeof(CustomerNotFoundFault))]
Customer GetCustomer(UInt32 customerId)
Этот пункт в основном относится к разработке API. Там, где это не так важно, вы являетесь как автором, так и потребителем услуги.
Я полностью поддерживаю предложение Кирка Бродхерста об использовании пространств имен для управления версиями. Я использую это, и это хорошо работает.
РЕДАКТИРОВАТЬ: во втором чтении, я думаю, что я неправильно прочитал ваш пост. Я предполагал, что ваши объекты параметров и возвращаемых значений являются неким общим объектом, который вы используете во всех сервисах. Если они действительно специфичны для каждого сервиса, то это отличный подход, который я успешно использовал во многих случаях. Вы преуспеете с этим.