На рисунке 4 приведена диаграмма развертывания рассматриваемого решения.
Рисунок 4
Решение состоит из трех основных .NET-сборок, обеспечивающих процессы аутентификации, авторизации, поддержку сессий:
SecurityBase - сборка, содержащая общие для Web-сервера и сервера приложения типы и константы.
SecurityClient - сборка, содержащая типы для клиентской части схемы аутентификации и типы, обеспечивающие поддержку сессий на Web-сервере. Устанавливается на Web-сервер.
SecurityServer - сборка, содержащая типы для аутентификации и поддержки сессий на стороне сервера приложения.
Также в пример входит сборка BusinessFacade, содержащая типы, обеспечивающие интерфейс с сервером приложения. На Web-сервер устанавливается сокращенная версия этой сборки, в ней содержатся только сигнатуры методов, без содержания.
На сервере приложения устанавливается полная версия BusinessFacade.
На Web-сервере и сервере приложения настраивается конфигурация Remoting.
На Web-сервере конфигурация содержится в Web.config <system.runtime.remoting> <application name="SHR"> <client> <wellknown type="RemotingExample.BusinessFacade.SomeSystem, BusinessFacade" url="tcp://localhost:8039/SHR/SomeSystem.rem"/> </client> <channels> <channel ref="tcp client"> <clientProviders> <formatter ref="binary" includeVersions="false"/> <provider type="RemotingExample.Security.ClientChannelSinkProvider, SecurityClient"/> </clientProviders> </channel> </channels> </application> </system.runtime.remoting>
Не сервере приложения в ConsoleServer.exe.config: <system.runtime.remoting> <application name="SHR"> <service> <wellknown mode="Singleton" type="RemotingExample.BusinessFacade.SomeSystem, BusinessFacade" objectUri="SomeSystem.rem" /> </service> <channels> <channel name="ServerCnannel" ref="tcp server" port="8039" > <serverProviders> <formatter ref="binary" includeVersions="false"/> <provider type="RemotingExample.Security.ServerChannelSinkProvider, SecurityServer"/> </serverProviders> </channel> </channels> </application> </system.runtime.remoting>
Инициализация конфигурации Remoting на Web-сервере происходит в методе: protected void Application_Start(Object sender, EventArgs e) { string configPath = System.IO.Path.Combine(Context.Server. MapPath(Context.Request.ApplicationPath ),"Web.config"); RemotingConfiguration.Configure(configPath); }
Инициализация на сервере приложения:
RemotingConfiguration.Configure("ConsoleServer.exe.config");