Я не знаю, что это лучшая (или даже рекомендованная) структура каталогов, но я остановился на этом.
.\MyProject
|----\bin
|----\MyProject (main application)
|----\MyProject.Core (shared libraries)
|----\MyProject.Server (WCF-hosting Windows service)
|----\MyProject.Services (the WCF services)
|---------\MyProject.Services.Service1 (WCF Service1)
|---------\MyProject.Services.Service1.Support (WCF Service1-specific libraries)
|---------\MyProject.Services.Service2 (WCF Service2)
|---------\MyProject.Services.Service2.Support (WCF Service2-specific libraries)
Исходя из этой структуры каталогов и того, что вы пока показали, класс Service будет помещаться в папку MyProject.Services.Service в каталоге MyProject.Services. Класс CustomerService будет находиться в папке MyProject.Services.Service.Support в каталоге MyProject.Services.
Я недостаточно работал с базами данных, чтобы понять компромисс между открытием нескольких одновременных соединений или простым повторным использованием одного и того же соединения снова и снова. Я предполагаю, что то, как вы это делаете, является предпочтительным решением.
И, учитывая, что вы откладываете свою обработку на базу данных каждый раз, когда вызывается ваша служба WCF (путем создания нового объекта CustomerService), вы могли бы извлечь выгоду из того, что ваша служба WCF станет одиночной. В общем, WCF-синглоны не одобряются по причинам масштабируемости, поскольку предполагается, что они разделяют состояние между различными вызовами службы и, следовательно, должны быть синхронизированы. Однако, как показано, ваша служба WCF не поддерживает состояние напрямую. Он просто обращается к базе данных для создания, обновления, удаления или извлечения клиента. Пока доступ к базе данных осуществляется с использованием соответствующей схемы блокировки, вы можете избежать накладных расходов, связанных с созданием каждого вызова вашей службы WCF. Чтобы сделать ваш сервис одиночным, используйте следующий атрибут в вашем сервисе:
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class Service : IService
{
}