Регистрация с regasm и regsvcs - PullRequest
       42

Регистрация с regasm и regsvcs

12 голосов
/ 09 ноября 2011

У меня следующий вопрос: возможно ли, что сборка .NET будет зарегистрирована и с Regasm и Regsvcs?Спасибо

1 Ответ

22 голосов
/ 08 марта 2012

Это ответ на вопрос по тайм-ауту. но позвольте мне объяснить различия, которые я знаю.

Чтобы понять это, вам нужно вызвать в воображении различия между COM и приложением COM +.

Зарегистрируйте ваши типы как COM - Создает объект по требованию каждый раз, когда код пытается инициализировать объект

Зарегистрируйте свои типы как приложение COM + - Создает объект, поддерживает пул объектов, поддерживает транзакции, поддерживает повышенную безопасность Windows и многое другое.

Чтобы понять пул, я заимствую ответ от http://www.tek -tips.com / viewthread.cfm? Qid = 116249

Основной метод COM + для добавления масштабируемости и производительности осуществляется через пул объектов. К сожалению, для этого требуется компонент с свободной резьбой, чего не может сделать VB6. Но ... .NET (любой язык) и C ++ могут.

Что делает пул объектов, вы говорите MTS / COM + создать пул доступных объектов, от минимума, который создается при запуске COM +, до некоторого максимума (что я не знаю, является ли это жестким максимумом или гибкий). Что делает для вас пул, так это предоставляет вызывающей стороне предварительно инициализированный объект. Это намного быстрее, чем ожидание создания объекта (особенно по сети). Вызывающая сторона подключается к объекту, выполняет вызовы методов и отключается. Затем объект возвращается в бассейн.

Это требует фундаментальных изменений в архитектуре программы. До COM + все открывали соединение с базой данных и оставляли ее открытой на время действия приложения. Это было нормально, когда численность пользователей была <100, поскольку нагрузка на сервер была управляемой (каждое соединение занимает оперативную память). Но для большого количества пользователей или неизвестного количества пользователей (например, пользователей из Интернета) сервер базы данных быстро перегружается. Кто-то понял, что каждый транзакционный пользователь фактически выполнял небольшую часть времени реальной работы - в остальное время он простаивал. </p>

Таким образом, ваши программы должны установить соединение, сделать запрос, получить результаты, а затем отключиться (это также относится к объектам, не относящимся к базе данных). Это также подразумевает, что приложение не имеет состояния (состояние программы не поддерживается между запросами). Потому что ... объект, который вы сейчас используете, принадлежал кому-то еще 200 миллисекунд назад. И когда вы закончите с использованием объекта, другой пользователь будет использовать его после вас. Таким образом, объекты не могут хранить какую-либо информацию - они должны быть только кодом.

regasm - регистрирует типы сборки .net как COM. Это означает, что regasm выбирает открытые типы вашей сборки .Net, а затем записывает соответствующие записи реестра в HKCR ....; (так работает regsvr32).

  • regasm может сгенерировать для вас файл tlb (так же, как tlbexp.exe)
  • regasm может кодировать вашу сборку .Net. То есть, если у вас нет сборки .Net в GAC, вы можете создать кодовую базу COM для расположения файла, где присутствует сборка .Net. И отсюда COM Marshaller выберет выполнить сборку с CLR.
  • regasm позволяет создать файл .reg, дважды щелкнув по которому, вы можете обновить записи реестра. Вы должны убедиться, что сборка .Net установлена ​​на коммутаторе GAC, поскольку / regfile в regasm не позволяет вам / codebase (если это делает codebase, то это бессмысленно)

regsvcs - Создает приложение COM + из сборки .Net. Это означает, что regsvcs выбирает открытые типы вашей сборки .Net и, кроме записи соответствующих записей реестра, создает приложение COM +, которым вы можете управлять через консоль диспетчера служб компонентов (% systemroot% \ system32 \ comexp.msc). ).

  • regsvcs создает приложение COM + на основе информации, передаваемой ему из командной строки, или на основе информации, доступной из .Net dll.

  • regsvcs позволяет объединять типы COM + в существующее приложение COM +.Взгляните на comexp.msc, чтобы пройти через него, чтобы понять приложение COM + и COmponets, которыми управляет COM +.

Если вы пишете класс C # с ComVisible (true) -> Открытые типы этого класса (Foo) готовы к регистрации с помощью регазма для COM.

    // Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
public class Foo{....}

Если вы пишете класс C # с ComVisible (true), наследуяиз System.EnterpriseServices.ServicedComponent (и других настроек, конечно ..) -> Этот класс (FooBar) готов к регистрации в качестве приложения COM +.

    // Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
  public class FooBar: System.EnterpriseServices.ServicedComponent{.....}

Создание приложения COM + из.Net - Вы можете начать здесь.Помните, что COM + предоставляет расширенные возможности управления транзакциями для открытого объекта COM.

http://support.microsoft.com/kb/306296 http://my.execpc.com/~gopalan/dotnet/complus/complus.net_accountmanager.html http://www.codeproject.com/Articles/3845/Creating-COM-Objects-using-EnterpriseServices-in-N

...