Раньше я пользовался веб-сервисами и понимаю их концепцию. Однако теперь я настроил веб-сервис WCF, но у меня есть вопрос по поводу его использования. (В том, как настраивается учебник.)
У меня настроено следующее:
- Библиотека службы WCF (называемая CalculatorService)
- Хост службы (называется CalculatorServiceHost)
- Прокси-сервер службы (называется CalculatorServiceProxy, использует ClientBase)
- Клиент службы (называемый CalculatorServiceClient)
Насколько я понимаю, это так:
- Сервисная библиотека содержит сервис / объект, который можно использовать в веб-сервисе. Допустим, это калькулятор с добавлением метода.
- Хост делает этот класс с его функциями доступными для клиентской стороны.
- Прокси-сервер отправляет и получает сообщение от клиента к настроенной конечной точке.
- Клиент может вызывать функции из службы через прокси.
Учебник настраивает прокси следующим образом:
public class MyCalculatorServiceProxy : ClientBase<ICalculator>, ICalculator {
public int Add(int num1, int num2){
return base.Channel.Add(num1, num2);
}
}
Это означает, что в прокси-сервере я должен ссылаться, по крайней мере, на сборку, содержащую ICalculator. Клиент также жалуется на отсутствие ссылки на интерфейс, если отсутствует ссылка на ту же сборку.
В этом руководстве интерфейс и класс / служба, наследующие интерфейс, находятся в одной сборке. Таким образом, ссылка на сборку интерфейса на стороне клиента означает, что вы также можете создать экземпляр класса «Калькулятор» и даже не нуждаетесь в службе WCF для вызова функций.
Означает ли это, что вам всегда нужны две сборки со службами WCF. Один с интерфейсами, а другой с классами / услугами?
Поправьте меня, если я ошибаюсь или у кого-то есть дополнительная информация / комментарии.
ChannelFactory<T>
для создания прокси для клиента. Но совершенно законно иметь их обоих в одной сборке. - person Tim   schedule 28.02.2016