2013-11-07 2 views
0

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

ответ

0

Вы можете захватить открытый запрос в родительском домене и обернуть его классом, который наследует MarshalByRefObject. Ссылка на такой класс может быть легко перенесена в другой AppDomain.

Обратите внимание, что вы должны обернуть ЛЮБОЙ класс, который передается между AppDomains (параметры метода, возвращенный результат, EventArgs и т. Д.).

Например:

class Connection : MarshalByRefObject 
{ 
    event ReceivedDataEventHandler ReceivedData; 

    void Send(byte[] b) 
    { 
     // ... 
    } 
} 

class ReceivedDataEventArgs : MarshalByRefObject 
{ 
    public string Data { get; } 
} 

delegate void ReceivedDataEventHandler(object sender, ReceivedDataEventArgs e); 
+0

Жаль EventHandler мероприятия будут выполняться в дочернем домене, поэтому он будет передавать весь основной объект (который зарегистрировал событие) в дочернем домене. –

+0

Вы правы, это был просто пример, поясняющий, что любой объект, который может быть перенесен между AppDomains, должен наследовать MarshalByRefObject. Это означает, что зарегистрированный класс должен также наследовать MarshalByRefObject или быть Serializable (для этой цели может использоваться только один вспомогательный класс). Другой альтернативой является регистрация с использованием статического делегата, если это позволяет дизайн приложения. – MaMazav

Смежные вопросы