COM+ - двойной вызов конструктора
От: mDmitriy Россия  
Дата: 05.09.14 16:26
Оценка:
Всем привет!

Win7 x64, VS 2012, NET 4.0, написан работающий COM+-объект (AnyCPU).
Вызываю с клиента (все на локальной машине, COM+-объект виден в "Службах компонентов"):
var clsid = new Guid("guid COM-объекта");
var type = Type.GetTypeFromCLSID(clsid, "localhost", true); // срабатывает только через localhost почему-то :???:
var instance = Activator.CreateInstance(type);

При этом некоторые методы COM+-объект, которые должны срабатывать по идее 1 раз, срабатывают два.
Примерный код сервера прилагаю:
[ObjectPooling(Enabled = true, MinPoolSize = 1, MaxPoolSize = 100, CreationTimeout = 10000)]
[ConstructionEnabled(Enabled = true, Default = "default")]
public class COMPlusObject : ServicedComponent, IProcessInitializer
{
    // методы расположены в порядке их вызова
    static COMPlusObject() {/*...*/}
    public COMPlusObject() {/*...*/}                                // при IProcessInitializer вызывается второй раз после Startup
    protected override void Construct(string s) {/*...*/ }          // при IProcessInitializer вызывается второй раз после второго COMPlusObject()
    protected override void Activate() {/*...*/}                    // при IProcessInitializer вызывается второй раз после второго Construct
    public void Startup(object punkProcessControl) {/*...*/}
    public override object InitializeLifetimeService() {/*...*/}    
    protected override void Deactivate() {/*...*/}                  // не отрабатывает вообще
    protected override bool CanBePooled() {/*...*/}                 // не вызывается
    public void Shutdown() {{/*...*/}                               
}

Происходит это только при первом вызове объекта после запуска COM+-сервиса, при перезапуске повторяется.

Если убрать IProcessInitializer, то все работает нормально, по одному разу...
В чем может быть дело?
Спасибо...
Отредактировано 05.09.2014 16:33 mDmitriy . Предыдущая версия . Еще …
Отредактировано 05.09.2014 16:28 mDmitriy . Предыдущая версия .
Re: COM+ - двойной вызов конструктора
От: Pavel Dvorkin Россия  
Дата: 07.09.14 15:45
Оценка:
Здравствуйте, mDmitriy, Вы писали:

Посмотри здесь (в конце)

http://social.msdn.microsoft.com/Forums/en-US/8aa1a42b-e64e-4991-b400-ad4089e33798/enterpriseservices-objectpooling-and-tracing?forum=netfxremoting
With best regards
Pavel Dvorkin
Re[2]: COM+ - двойной вызов конструктора
От: mDmitriy Россия  
Дата: 07.09.14 17:19
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Посмотри здесь (в конце)
PD>http://social.msdn.microsoft.com/Forums/en-US/8aa1a42b-e64e-4991-b400-ad4089e33798/enterpriseservices-objectpooling-and-tracing?forum=netfxremoting
Спасибо!
Но увы, там описана проблема (аж с 2006 года), но нет решения.
Метод Startup вызывается почему-топосле создания объекта и запускает все методы его инициализации по новой.
Могут там создаваться 2 экземпляра объекта?
Re[2]: COM+ - двойной вызов конструктора
От: mDmitriy Россия  
Дата: 09.09.14 13:36
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:
Разобрался — это exception's в стартовых методах дают такой эффект, а IProcessInitializer не причем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.