Проверить
Я не совсем уверен, что вы ищете, или что вас больше всего интересует - не могли бы вы уточнить?
Вы должны принять во внимание две части: клиентскую и серверную.
Сервер — это класс, который предоставляет методы, и его нужно где-то разместить — в 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