Как я могу назвать неуправляемый COM-объект в ASP.Net 3.5

У меня есть неуправляемый COM-объект, и я хотел бы назвать его из ASP.NET 3.5.

Я могу просто назвать его как в C#, или я должен записать что-то специальное в web.config или настроить IIS особенно.

Прямо сейчас я получаю stackoverflow исключение.

1
задан Cœur 17 December 2017 в 03:37
поделиться

2 ответа

Не уклоняйтесь от Perl: это облегчает выполнение такого рода задач!

#! /usr/bin/perl -i.bak

use warnings;
use strict;

my $old = join "|" => qw(
  Field_Blob_Medium
  Field_Boolean
  Field_Unsigned_Int
);

chomp(@ARGV = `find . -iname \*.[ch]pp -print0 |
               xargs -0 grep -lE '($old)'`);

unless (@ARGV) {
  warn "$0: nothing to do!\n";
  exit 0;
}

while (<>) {
  s[Field_Blob_Medium]  [my::ns::MediumBlob]g ||
  s[Field_Boolean]      [my::ns::Bool]g       ||
  s[Field_Unsigned_Int] [my::ns::UInt]g;

  print;
}

Переключатель -i предназначен для контекстного редактирования. Он автоматически создает резервные копии и записывает преобразованные результаты в исходные расположения.

Установка @ ARGV приводит к тому, что программа вызывалась только теми файлами * .cpp и * .hpp , которые содержат старые имена классов. Переключатель -E на grep включает расширенные регулярные выражения, так что незаметные (, ) и | являются метасимволителями.

При отсутствии попаданий ( т. е. , если @ ARGV пуст), то делать нечего.

В противном случае, для каждой строки каждого файла, который имеет старые имена (механикой которых управляет Perl!), попробуйте переименовать Field _ Blob _ Medium в my:: ns:: Medium Blob и так далее. Обратите внимание, что эти попытки замены прекращаются после первого успеха, поэтому, если строка содержит два разных старых имени, одно будет заменено, а другое останется прежним.

Обычно оператор подстановки записывается s///, но можно использовать квадратные разделители, как описано выше. Я сделал это, чтобы оправдать новые имена.

Конечно, это резерв для вашей фактической замены.

Наконец, напечатайте возможно измененную строку, которая из-за -i записывает ее в обновленный исходный файл.

-121--4481844-

Как и остальные сказали, убедитесь, что сначала определите узкие места.

Что касается ваших опасений по поводу БД, я бы предложил создать некоторые индексы в ваших таблицах, чтобы ускорить медленные запросы (только при их идентификации)

http://www.postgresql.org/docs/8.2/static/sql-createindex.html

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ]
    ( { column | ( expression ) } [ opclass ] [, ...] )
    [ WITH ( storage_parameter = value [, ... ] ) ]
    [ TABLESPACE tablespace ]
    [ WHERE predicate ]

Пожалуйста, обязательно прочитайте, когда и когда не использовать индекс

-121--4667587-

Невозможно просто вызвать com-объект из управляемого кода. Необходимо выполнить P/Invoke. Узнайте pinvoke.net как p/вызвать большую часть Windows API. Существует также средство для генерации кода p/invoke, называемое p/invoke interop assistant.

Что касается причины переполнения, то оно, вероятно, не связано с какими-либо вызовами com. Возможно, ты делаешь что-то еще не так. Проверьте свои свойства, это одно из самых распространенных мест, где вы окажетесь с SO. Кроме того, проверьте стек вызовов в точке переполнения, поскольку в нем будет указано, какие методы вызывают проблему.

1
ответ дан 3 September 2019 в 01:09
поделиться

Поскольку она уже нажата, не следует напрямую манипулировать историей. git revert будет возвращать конкретные изменения от фиксации с использованием новой фиксации, чтобы не манипулировать историей фиксации.

-121--1773252-

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

Также помните, что браузеры ограничивают количество активных вызовов ajax. Таким образом, если вы пытаетесь сделать слишком много вызовов ajax, можно подождать (блокируя все javascript код), чтобы другие вызовы были завершены.

-121--3594888-

Для проектов .NET имеется вкладка COM в диалоговом окне «Add References». Добавьте ссылку на COM-объект и он должен работать.

Если он работает на машине разработки, но не на производстве, необходимо просто проверить все обычные подозреваемые:

  • Зарегистрирован ли объект COM (и зависимости) на производственном сервере.
  • Работает ли веб-сервер в 64-разрядной версии? Это остановит запуск 32-разрядного COM-объекта в процессе.
1
ответ дан 3 September 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: