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

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

Пожалуйста, опишите шаги с номером шага и сохранением серийного номера.

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


person user366312    schedule 03.10.2009    source источник
comment
Можете ли вы описать создание контрактов и вызов операций на этом этапе. т.е. описание с точки зрения кодирования.   -  person user366312    schedule 03.10.2009


Ответы (1)


Проверить

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

Вы должны принять во внимание две части: клиентскую и серверную.

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

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

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

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

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

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

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

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

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

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

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

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

Марк

person marc_s    schedule 03.10.2009
comment
Можете ли вы описать создание контрактов и вызов операций на этом этапе. т.е. описание с точки зрения кодирования. - person user366312; 03.10.2009