Мало того, что это зависит от бизнес-ситуации, как указано в этом ответе , это также зависит от вашего уровня допустимого риска при разработке кода. Тесная связь между клиентом и службой может усложнить изменение кода по мере роста и усложнения приложения. Вместо этого, четкое разделение обязанностей и слабая связь обычно повышают удобство обслуживания и общую гибкость проекта.
В этом случае это, вероятно, означало бы, что служба не будет знать о существовании клиента и его реализации, так что это исключит службу, непосредственно манипулирующую списком клиентов. Если эта служба реализована в виде библиотеки классов, я бы порекомендовал подход «издатель / подписчик», где служба предоставляет событие C # типа, содержащего соответствующую информацию об удалении, а клиент обрабатывает это событие и соответственно обновляет свой список.
Если это веб-служба (односторонняя), я ожидаю, что вызов службы удаления будет отделен от вызова службы GetAll. Клиент будет вручную управлять своим списком, используя комбинацию этих вызовов.