В типичном сервис-ориентированном сценарии у вас есть DataContract в вашей сервисной библиотеке на стороне сервера. Любой, кто будет вам звонить, будет добавлять клиентское прокси-соединение к вашему сервису и, следовательно, будет дублировать ваш DataContract.
Таким образом, в «нормальном» случае у вас есть «главный» DataContract на стороне сервера и отдельный класс в каждом клиентском прокси, который обращается к вашему сервису. Эти клиентские копии "идентичны по проводам", например, они сериализуются в один и тот же формат сообщения - и это действительно все, что есть между вашим клиентом и вашим сервером - сериализованное сообщение, отправляемое туда и обратно.
Как разработчик сервиса, вы обязательно должны иметь свой DataContract на стороне сервера. Но то же самое относится и к сервисным контрактам - они также должны быть на стороне сервера - в противном случае вы не сможете опубликовать свой сервисный интерфейс в мире, который будет использоваться любым, кто может подключиться к вашему сервису.
Я бы предложил следующие как минимум два проекта для каждого сервера:
- a библиотека классов , которая содержит контракты на обслуживание (интерфейсы IService), контракты на данные и, возможно, контракты на отказ
- a библиотека классов или автономный EXE (консольное приложение), который содержит фактическую реализацию службы (классы, реализующие интерфейсы службы)
Марк