Я не совсем ясно по вашей проблеме, но позвольте мне не останавливаться на этом в моем ненасытном поиске представителя.
Во-первых, я бы определенно предложил разместить «межсетевой экран» между кодом отчетности и кодом WCF. Вы должны рассматривать ваш код WCF как фасад , максимально изолируя его от изменений в ваших отчетах. Если ваш механизм отчетов требует изменений, вы можете переписать код сервера, не связываясь с кодом клиента.
Следующее, что я бы избавился от идеи, что вы можете, как правило, обслуживать X отчетов с помощью одного звонка. Вы должны представлять каждый отчет как отдельный вызов, каждый из которых имеет подпись, которая принимает точное число и тип аргументов, которые требуются для отчета.
Но вы спрашиваете, что произойдет, когда отчет изменится, или новый отчет должен быть добавлен? Вы не можете (т.е. не должны ни при каких обстоятельствах) создавать версии интерфейсов, и ваш контракт на обслуживание является интерфейсом. Следовательно, при изменении отчетов необходимо пометить метод отчета OLD как устаревший. Добавьте обновленный метод (а также методы для новых отчетов) в НОВЫЙ контракт на обслуживание, который будет обслуживаться рядом со старым. Если люди пытаются использовать старый метод отчета, либо попытайтесь сделать должное (примените разумные значения по умолчанию к тем аргументам, которые не предоставлены), либо сгенерируйте исключение. Если отчет резко изменяется до точки, в которой требуется переустановка клиента, рассмотрите возможность добавления обновленного отчета в качестве нового.
Добавление обновленных отчетов и / или новых отчетов становится простым делом удаления нового двоичного файла на сервере и изменения файла .config.