Если бы вы могли фундаментально изменить свой код, вы могли бы предоставить только одну конечную точку, которая работает с сообщениями запроса / ответа. Таким образом, может быть одна конечная точка и одно определение службы, которое принимает (возможно, производное) сообщение запроса и возвращает ответное сообщение. Ваш интерфейс в сервисе тогда будет просто единичным методом, и в реализации на стороне сервера вы перенаправите этот объект запроса в фактическую реализацию сервиса (возможно, определяемую фабрикой), возможно, используя метаданные в сообщении запроса (или даже «тип имя), чтобы определить, какая служба вызывается.
Итак, ваш интерфейс конечной службы будет иметь такой метод:
public interface IServiceRequestor
{
Response ProcessRequest(Request request);
}
Это позволяет вам обрабатывать неограниченное количество доступных служб без необходимости знать, какими они будут во время компиляции / разработки, а также избегать распространения методов Service, определяющих доступные вызовы службы