Пул COM-объектов и веб-служба .NET

У меня есть COM-объект, к которому мне нужно получить доступ из моей веб-службы .NET.

Я знаю обо всем, что касается STA/MTA, поэтому мой COM-объект будет преобразован в MTA и не будет иметь глобального состояния (хотя сам по себе не будет многопоточным).

Если я настрою его как сервер COM+ и укажу пул объектов, значит ли это, что для каждого потока веб-службы будет использоваться другой экземпляр объекта COM? И без очереди?

Спасибо


person Duncan    schedule 12.05.2009    source источник


Ответы (1)


Это зависит от нескольких вещей.

Если вы устанавливаете верхний предел количества объектов в пуле и сохраняете ссылку на объект в клиенте веб-службы, не используете JIT или не устанавливаете флаг Done в вызове метода, они будут очередь, как только они достигнут предела пула.

Если вы используете JIT и устанавливаете флаг Done, вызывая SetComplete или используя атрибут AutoComplete в методе, компонент COM+ будет деактивирован и возвращен в пул, когда метод вернется. Если количество одновременно выполняемых методов не достигает максимального предела пула, новые вызовы методов никогда не должны ждать.

person Carlos A. Ibarra    schedule 12.05.2009
comment
Я бы не стал поддерживать COM-объект живым или что-то в этом роде, это был бы простой вызов типа «запустил и забыл». Мне просто нужно запросить у COM-объекта что-то, и как только я это получу, я смогу закрыть соединение с ним. Когда вы говорите атрибут AutoComplete - это на стороне .NET? - person Duncan; 12.05.2009
comment
Нет, [AutoComplete(true)] идет на стороне COM+. Вы можете отключиться от COM+, и это также приведет к деактивации, но если вам нужна скорость, поддерживайте соединение с объектом COM+ и продолжайте вызывать его методы. - person Carlos A. Ibarra; 12.05.2009
comment
Хорошо, дело в том, что каждый поток веб-службы будет просто вызывать объект COM+ ОДИН РАЗ каждый раз. Исходя из вашего опыта, производительность будет отстойной? Существуют ли значительные накладные расходы при вызове COM+ из .NET? - person Duncan; 12.05.2009
comment
Если вы каждый раз создаете клиентский объект COM+, ему придется устанавливать соединение с сервером COM+, что приводит к некоторой задержке, особенно по сети. Если они находятся на одной машине, это может быть не так уж плохо. Кроме того, его проще программировать, и вам не нужно беспокоиться о повторном подключении, если сервер выйдет из строя. Попробуйте и посмотрите. Если это слишком медленно, вы всегда можете сделать это позже. - person Carlos A. Ibarra; 13.05.2009