Напишите вашу winform (не совсем тонкий клиент), как вы это обычно делаете.Мы назовем это тонким, потому что он не будет тяжелым, просто логика интерфейса.Вместо того, чтобы ссылаться на свой бизнес и сборку данных, создайте класс агента, на который вы будете ссылаться из своего приложения winforms.Тогда у агента будет реализация для связи с серверной частью, а ваш интерфейс не будет знать, как происходит связь.Затем создайте класс Service Contract (который предоставит интерфейсы внешнему интерфейсу) в отдельном проекте.Агент будет использовать этот контракт.
Поскольку вы работаете в VS2005, я предполагаю, что у вас установлены расширения .net framework 3.0, но не 3.5.Вы можете использовать WCF для связи с внутренним сервером, где ваши интерфейсы будут вызываться агентами.
Если вы хотите держаться подальше от WCF, вы также можете использовать .net remoting, но это может быть немного сложнее в настройке, и обычно он не является предпочтительным транспортным механизмом по сравнению с WCF.
Таким образом, это выглядело бы так:
Уровень клиента
Winform
Агент
Уровень бизнеса
Договор на обслуживание
Бизнес-компоненты
Доступ к данным
Уровень базы данных
База данных
Вот статья , которая как бы описывает этот шаблон.