Можете ли вы вызвать COM-объект .NET 2.0 из веб-приложения ASP.NET 1.1?

У нас есть веб-приложение ASP.NET 1.1. Он вызывает COM-объект C ++, который, в свою очередь, вызывает COM-объект .NET. Первоначально этот COM-объект .NET был сборкой .NET 1.1. Теперь нам нужно изменить этот COM-объект .NET, и в этом процессе мы используем Visual Studio 2008, так что теперь это COM-объект .NET 2.0. Теперь мы обнаруживаем, что наше веб-приложение ASP.NET 1.1 все еще может вызывать COM-объект C ++, но COM-объект C ++ не может вызвать CoCreateInstance () для нового COM-объекта .NET 2.0. Когда мы настраиваем веб-приложение для использования .NET 2.0 Framework, COM-объект C ++ может вызывать COM-объект .NET 2.0, но это нарушает работу веб-приложения.

На данный момент я планирую перекомпоновать объект .NET COM с помощью Visual Studio .NET 2003, чтобы я мог сделать его сборкой .NET 1.1. Но я бы предпочел не делать этого, если возможно. Я знаю, что нам также следует обновить наше веб-приложение до .NET 2.0, но это займет больше времени.

Итак, есть ли способ для нашего веб-приложения ASP.NET 1.1 вызывать COM-объект .NET 2.0 через COM-объект C ++?

Спасибо за любые предложения.

-Дэйв Херрманн


person Dave Herrmann    schedule 02.02.2010    source источник
comment
Нет возможности обновить приложение .NET 1.1 до .NET 2.0? В .NET 2.0 очень мало того, что могло бы сломать приложение .NET 1.1.   -  person John Saunders    schedule 02.02.2010


Ответы (3)


Нет, если вы запустите его в процессе. Среды выполнения .Net v1.1 и v2.0 не могут сосуществовать в одном процессе. Выигрывает тот, который загружается первым.

Однако вы должны иметь возможность запускать его в контексте активации COM + в отдельном процессе. Это могло бы быть целесообразным решением вашей ситуации.

person codekaizen    schedule 02.02.2010
comment
Да, вот что я выясняю. Моя COM-сборка .NET 2.0 - это внутрипроцессный COM-объект, поскольку он работает как часть IIS. Итак, я думаю, что мое единственное решение - переустановить старую среду разработки Visual Studio .NET 2003 и перестроить там мою сборку с помощью .NET 1.1. Спасибо за ответы. -Дэйв Херрманн - person Dave Herrmann; 03.02.2010
comment
Вы можете запускать внутрипроцессные COM-объекты в отдельном процессе, а инфраструктура COM + должна выполнять маршалинг вызовов за вас. Это простой вопрос настройки. Вы можете попробовать это в первую очередь ... - person codekaizen; 03.02.2010

Быстрое предложение - это может не сделать ничего проще ... но есть возможный способ обойти это, почему бы не создать карту памяти для связи IPC между .NET 1.1 и приложением .NET 2.0, скажем, например, C ++ COM создает карта памяти для чтения / записи, объект .NET 1.1 открывает карту памяти, записывает некоторые данные, COM-объект C ++ считывает их и делегирует вызов COM-объекту .NET 2 ... и возвращает данные через карту памяти ... извините, если я не могу дать вам лучшего предложения, чем это ... вы ограничены временем?

1.1 .NET -> C ++ COM -> .NET 2.0 COM

Надеюсь, это поможет, С уважением, Том.

person t0mm13b    schedule 02.02.2010
comment
Я думаю, что просто настроить контекст COM + было бы намного проще ... не требуется код + перекомпиляция. - person codekaizen; 02.02.2010

Если я вас правильно понял, вы хотите строить свою сборку на 1.1, а не на 2.0. Почему бы вам не попробовать использовать компилятор командной строки? Вам не нужно устанавливать VS 2003 только для компиляции и сборки сборки.

Если вы не знаете, с чего начать, установите VS на песочнице, соберите проект и проверьте окно вывода - вы увидите, какие команды используются для компиляции и сборки (csc.exe или vbc.exe являются наиболее важными из них. ) В большинстве случаев это не ракетостроение.

Другой вариант: вообще перейти на 2.0 - особо не помешает.

P.S .: .NET COM-объект написан неверно. Назовите это сборкой.

person Dercsár    schedule 03.02.2010