Позвольте мне ответить на несколько вопросов:
1) netTcpBinding - это отличное связывание - очень быстрое, очень хорошее по производительности - обязательно с этим!
3) Либо хост в IIS 7.0, либо самовывоз - напишите немного службы Windows NT и сами управляйте хостингом. Предоставляет вам больше контроля и возможность вручную запускать и останавливать службу DAL. Я бы даже не стал пытаться заставить NetTcp работать на IIS5 / 6 с какой-то хитростью / хаком - трата времени.
4) Несколько конечных точек одной и той же привязки бесполезны и не помогают с производительностью.
5) Я бы всегда использовал «Per-Call». Каждый запрос на обслуживание получает свой экземпляр службы, вызов обрабатывается, и тогда все готово. Это делает программирование реализации службы WCF несложным - если вы идете в одиночку, чтобы иметь какую-либо производительность, вам нужно беспокоиться о многопоточном и поточно-ориентированном программировании - беспорядок, действительно. Не делай этого. НЕТ, просто не делай этого.
DAL всегда должен быть без сохранения состояния и должен работать с шаблоном «откройте соединение с базой данных как можно раньше, выполните работу и закройте соединение как можно скорее», который идеально подходит для экземпляра для каждого вызова Режим. Когда приходит ваш запрос на обслуживание, соединение открывается (они все равно объединяются в пул соединений в ADO.NET на стороне сервера), работа завершается, и соединение снова закрывается.