ОК, поэтому у вас есть полный интерфейс IGreatService с множеством методов, которые реализованы в классе MyGreatService.
Как насчет этого: вы создаете новый, второй интерфейс IMyServiceB, в котором есть только те несколько методов, которые вы хотите предоставить второй группе пользователей. Вы делаете так, чтобы ваш сервис реализовывал как IGreatService, так и IMyServiceB (это абсолютно возможно, без проблем):
public class MyGreatService : IGreatService, IMyServiceB
{
..
}
Служба B, в основном, просто вызывает те немногие методы в реализации службы, которые вы хотите представить - скажем, у вас есть MethodA на IGreatService, который вы также хотите предоставить на IMyServiceB (как MethodB) - реализуйте его так:
public class MyGreatService : IGreatService, IMyServiceB
{
....
// as defined on IGreatService
public void MethodA (....)
{
}
....
public void MethodB (.....) // as defined on IMyServiceB
{
MethodA();
}
}
Таким образом, вы получаете два отдельных интерфейса (= службы), но в основном вы пишете свой код только один раз.
Затем вы можете предоставить IMyServiceB на отдельной и отдельной конечной точке, чтобы пользователи, которые должны видеть только IMyServiceB, могли просто подключиться к этой отдельной конечной точке, и они получат только то, что им нужно для использования ваших операций service-B.
Может ли это сработать?
Марк