WCF - Связь клиент-сервер - PullRequest
       20

WCF - Связь клиент-сервер

0 голосов
/ 03 октября 2009

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

Плз опишите шаги с номером шага и ведением серийного номера.

В качестве альтернативы, пожалуйста, предоставьте мне веб-ссылку, описывающую эти шаги.

1 Ответ

1 голос
/ 03 октября 2009

Выезд

Я не совсем уверен, что вы ищете или что вас больше всего интересует - вы можете уточнить?

Вам необходимо принять во внимание две части: клиент и сервер.

Сервер - это класс, который предоставляет методы, и его необходимо разместить где-то - в IIS или в собственном приложении. В вашем сценарии самостоятельного размещения вы создаете ServiceHost, в котором размещается один класс обслуживания. В службе определены 1-n конечных точек, которые «открыты» и прослушивают входящие запросы.

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

Одним свойством в ServiceContract является InstanceContextMode , которое может быть:

  • PerCall: для каждого входящего запроса создается новый экземпляр класса обслуживания, который обрабатывает вызов и затем завершается; обычно это рекомендуемая настройка
  • PerSession: клиент устанавливает сеанс со службой, и экземпляр службы будет оставаться там до тех пор, пока клиент не завершит работу, и покажет это, или пока не истечет время ожидания неактивности
  • Single: существует только один экземпляр класса обслуживания, который обрабатывает все запросы (singleton). Если синглтон является однопоточным, это означает, что запросы сериализуются и обрабатываются один за другим. Чтобы разрешить одновременное обслуживание нескольких запросов, синглтон должен поддерживать многопоточность, а все внутренние переменные и т. Д. Должны быть защищены от одновременного доступа (все становится намного сложнее и грязнее при множественном одновременном доступе)

Другой связанный параметр: ConcurrencyMode , который может быть Single (только один класс обслуживания может обрабатывать только один запрос; это рекомендуемая настройка для активации по вызову; это самая простая модель), Reentrant (что в основном совпадает с Single, за исключением того, что дуплексные обратные вызовы разрешены обратно - когда-либо использовались, если у вас есть дуплексные каналы), и Multiple, что является лучшим выбором, если Синглтон-сервис и требует производительности - но модель программирования становится намного сложнее и требовательнее.

Клиент также должен знать (по конфигурации или по коду), куда обращаться за услугой.

Что клиент в основном делает (а сервер делает это в обратном направлении), это следующие шаги:

  • принимает один или несколько параметров (int, string, ваши собственные типы)
  • затем сериализует эти параметры в сообщение
  • обычно он шифрует и подписывает сообщение (необязательно)
  • затем он передаст это сообщение на сервер по проводам

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

На сервере после получения сообщения выполняются следующие шаги:

  • сообщение получено в конечной точке
  • сообщение проверено, расшифровано и т. Д.
  • сообщение десериализуется в параметры и объекты
  • диспетчер выясняет (на основе информации сообщения, например, действия SOP), какой объект и какой метод вызывать
  • этот метод затем вызывается и параметры сообщения передаются в

Как только сообщение было обработано на сервере, теперь сервер создает ответное сообщение и в основном отправляет его обратно тем же способом (сериализация, шифрование и т. Д.), И клиент получает его и интерпретирует его.

Марк

...