После конфигурирования среда Remoting обеспечивает прозрачное использование удаленных объектов. Однако, для такого прозрачного использования клиент должен иметь доступ к сборке с самим объектом, сборка с его интерфейсом недостаточна. Для решения данной проблемы можно либо пожертвовать прозрачностью, воспользовавшись классом System.Activator, или организовать веб службу Remoting на основе SOAP, что позволяет создать посредника на клиенте по спецификации веб службы в формате WSDL. Вариант с веб службой представляется более разумным – если клиент не имеет доступа к сборке удаленного объекта, то, вероятно, клиент и сервер находятся на разных предприятиях, и видимо речь идет о взаимодействии вне доверенной сети.
При использовании класса форматирования SoapFormatter, канала HttpChannel и активируемых сервером объектов среда Remoting позволяет организовать веб службу на основе SOAP, WSDL и кодирования SOAP-RPC (а не SOAP Document, в отличие от служб ASP.NET). В этом случае нет необходимости иметь сборку на клиенте, поскольку, используя методы класса System.Runtime.Remoting.MetadataServices.MetaData, можно получить сборку из описания веб-службы. Для упрощения данной задачи существует утилита soapsuds.exe. Нижеследующая команда записывает в текущий каталог файл с классом, который является наследником System.Runtime.Remoting.Services.RemotingClientProxy, имеет интерфейс удаленного объекта и может быть использован для сборки клиента Remoting.
soapsuds.exe -url:http://localhost:2080/endpoint?wsdl -gc
Следует отметить, что в файле конфигурации клиента по прежнему должно быть указано имя сборки на сервере (оно совпадает с именем файла, созданного утилитой soapsuds.exe). Созданный утилитой soapsuds.exe посредник не будет использоваться в ходе выполнения программы, если используется конфигурация Remoting. Если же клиент не использует метод RemotingConfiguration.Configure, то будет использован посредник, который попытается использовать тот же сервис, который был указан при его создании в его конструкторе.
Поскольку служба Remoting создает стандартную веб службу, то можно воспользоваться и описанной ранее утилитой wsdl.exe для создания клиента веб службы.
Важной особенностью среды Remoting является возможность использования в качестве сервера IIS, при этом клиент должен использовать канал HTTP. Конфигурация сервера в этом случае храниться в файле web.config в каталоге виртуального сервера, а в его подкаталоге bin размещаются сборки с маршализируемыми по ссылке объектами. Среда Remoting не содержит штатных средств обеспечения безопасности, и единственным практическим способом решения данной проблемы является именно использование IIS. Это позволяет использовать авторизацию и защиту передаваемых данных с помощью SSL. При использовании SSL, кроме соответствующей настройки сервера, клиент должен использовать префикс объектов https://.
Для идентификации пользователя при использовании встроенной авторизации IIS можно воспользоваться примерно следующим кодом.
RemoteObject object = new RemoteObject();
// Параметры идентификации клиента IDictionary properties = ChannelServices.GetChannelSinkProperties(object); properties["username"] = username; properties["password"] = password;
// Удаленный вызов object.Do();
При использовании IIS можно применять декларативную безопасность с помощью атрибута PrincipalPermissionAttribute, или императивную безопасность, когда метод объекта проверяет, принадлежит ли авторизованный пользователь к той или иной группе пользователей.
IPrincipal principal = System.Threading.Thread.CurrentPrincipal; if (!principal.IsInRole(Environment.MachineName + @"\SomeGroup")) { throw new UnauthorizedAccessException("Нет прав доступа."); }
При использовании в пределах домена или группы дружественных доменов Active Directory служба IIS позволяет использовать авторизацию операционной системы, для чего клиенту достаточно указать в файле конфигурации примерно следующее.
<channel ref="http" useDefaultCredentials="true" />
Таким образом, при использовании внутри Active Directory вместе со службой IIS среда Remoting позволяет легко создать безопасную систему на основе авторизации Windows (протокол Kerberos), сертификатов сервера и ролей пользователей.При использовании вне Active Directory вместо идентификации Windows можно использовать простую идентификацию.