Сервер.CreateObject Контекст сервера COM :-)

#c# #.net #asp-classic #com

#c# #.net #asp-классический #com

Вопрос:

Я реализую COM-компонент с использованием .net для нескольких устаревших компонентов для задачи миграции сервера.

Старый компонент использовался для получения пути к изображению на текущем сервере, преобразования его в формат jpeg и сохранения преобразованного изображения по тому же пути.

Это тривиально сделать в .net, однако моя главная проблема заключается в получении контекста сервера. Я не уверен, как сделать одно из следующих действий:

  1. сохранение изображения по тому же пути, по которому было получено исходное изображение
  2. или отправка изображения непосредственно в поток ответов (избегая необходимости сохранения преобразованного изображения)

Компонент вызывается на странице ASP класса (да, к сожалению!) с использованием:

 Server.CreateObject("Component.Class")
  

Есть ли в любом случае в коде реализации .net, который я могу получить ссылку на Server объект, создавший компонент? Я надеялся, что если я смогу получить ссылку на сервер, я смогу затем получить соответствующий контекст для обратной записи в поток ответов.

Ответ №1:

Я разобрался с этим, получив несколько подсказок для Интернета и Google. Подумал, что я должен опубликовать это на случай, если у кого-то еще возникнет такая же проблема.

Для получения контекста сервера требовалось включить следующие ссылки:

  1. COMSVCLib (уже должен быть в вашем разделе COM при добавлении ссылок на ваш проект)
  2. ASPTypeLibrary: найдите: «Библиотека объектов Microsoft Active Server Pages». Если вы не видите это сразу в своем разделе COM, вам нужно будет добавить это из «программы и компоненты Windows». Добавьте следующую функцию: Информационные службы Интернета -> Службы WWW -> ASP

Разработка вышеупомянутого была самой сложной задачей 🙂 После этого очень просто ссылаться на ваш сервер и другие встроенные объекты ASP:

 COMSVCSLib.AppServer aspServer = new COMSVCSLib.AppServer();
COMSVCSLib.ObjectContext oc = aspServer.GetObjectContext();
ASPTypeLibrary.Server server = (ASPTypeLibrary.Server)oc["Server"];
  

Вы можете сделать то же самое с другими объектами ASP, такими как Request и Response.