Как маршалловать вызовы, которые используют классы вне моего контроля между двумя .NET-процессами? - PullRequest
0 голосов
/ 10 июня 2011

У меня есть следующий сценарий. Мой код C # будет выполняться в двух процессах - один процесс будет процессом IIS, работающим под учетной записью «локальной службы», а другой будет работать под учетной записью с большими привилегиями. Оба процесса будут запускать код C #, версия .NET будет не менее 3.5.

Часть в IIS содержит набор классов, полученных из System.Web.IHttpHandler, и каждый класс реализует метод IHttpHandler.ProcessRequest(), который принимает параметр System.Web.HttpContext.

Я не могу сделать ничего полезного со стороны IIS - мне нужен доступ к файловой системе, активация сервера DCOM, другие вещи, которые «локальный сервис» не может сделать по умолчанию. Так что я бы хотел как-то переадресовать эти ProcessRequest() вызовы на ту часть, которая работает под пользователем с большими привилегиями. Мне нужно перенаправить объект в другой процесс, дождаться завершения вызова, тогда другой процесс изменит объект, и я хочу получить эти изменения на стороне вызывающего процесса - так, чтобы это выглядело как один процесс.

Я думал о WCF, но не уверен, что ему удастся справиться с распределением HttpContext между процессами. AFAIK (может быть неправильно), чтобы тип был отмечен System.Runtime.Serialization.DataContractAttribute ([DataContract]) для маршалинга, но HttpContext помечается этим атрибутом.

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

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Я бы настроил отдельный пул приложений в IIS, работающий под выделенной учетной записью с предоставленными необходимыми привилегиями, а затем настроил ваш код для выполнения в этом пуле приложений.Тогда вам больше не нужно делать этот сложный процесс.Кроме того, в своем коде вы можете просто олицетворять пользователя с большими привилегиями для выполнения вашей специальной последовательности кода.

0 голосов
/ 10 июня 2011

Дан предложение, вероятно, будет самым простым, если ваша среда поддерживает эту модель безопасности.

Если нет, то есть ли в вашем использовании HttpContext что-то особенное, что вам нужно для маршалинга самого объекта? Я, вероятно, просто создал бы сериализуемое сообщение или объект передачи данных на основе информации, содержащейся в HttpContext, и отправил бы этот объект моему удаленному процессу. Удаленный процесс отправит ответный объект обратно, который я затем смогу использовать для выполнения любых шагов, выполняемых на стороне IIS.

...