Вопрос

Если я не сохраню Сервисный контракт, прокси-сервер и Сервис в отдельной сборке, сервисные контракты и прокси-серверы будут находиться в клиентской сборке, а сервис - в Сервисной сборке.

Если я не сохраняю контракт с данными в отдельной сборке, где он должен находиться, на стороне клиента или Сервиса?

Могут ли контракты с данными находиться в обеих сборках?

Это было полезно?

Решение

В типичном сервис-ориентированном сценарии у вас есть DataContract в вашей серверной библиотеке сервисов.Любой, кто будет звонить вам, добавит клиентское прокси-соединение к вашему сервису и, таким образом, фактически продублирует ваш DataContract.

Таким образом, в "обычном" случае у вас есть ваш "главный" DataContract на стороне сервера и отдельный класс в каждом из клиентских прокси, получающих доступ к вашему сервису.Эти клиентские копии "идентичны по проводам", напримерони сериализуются в один и тот же формат сообщения - это действительно все, что существует между вашим клиентом и вашим сервером, - сериализованное сообщение, пересылаемое туда и обратно.

Как разработчик сервиса, вы определенно должны иметь свой DataContract на стороне сервера.Но то же самое на самом деле относится и к сервисным контрактам - они также должны быть на стороне сервера - иначе вы не сможете опубликовать свой сервисный интерфейс во всем мире, чтобы им мог пользоваться любой, кто может подключиться к вашему сервису.

Я бы предложил следующие, по крайней мере, два проекта для каждого сервера:

  • a библиотека классов который содержит сервисные контракты (интерфейсы IService), контракты данных и, возможно, контракты сбоев
  • a библиотека классов или автономный исполняемый файл (консольное приложение), содержащее фактическую реализацию сервиса (классы, реализующие интерфейсы сервиса)

Марк

Другие советы

Ответ - это зависит.

Обычно предпочтительнее хранить их отдельно, но могут быть ситуации, когда их совместное использование является таким же хорошим вариантом.

Когда вы держите их отдельно, вы можете ссылаться и использовать свой контракт с данными, не перетаскивая с ним свой контракт на эксплуатацию, что дает вам больше гибкости в том, как вы структурируете свое приложение.

Вы также можете создавать версии своих договоров самостоятельно.

Но все зависит от вашего фактического заявления.

Я бы настоятельно рекомендовал иметь отдельную сборку, содержащую ваши интерфейсы и контракты, на которые ссылаются как на стороне клиента, так и на стороне сервера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top