Всем привет!
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, то все работает нормально, по одному разу...
В чем может быть дело?
Спасибо...
Здравствуйте, 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 экземпляра объекта?