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