Я пытаюсь внедрить в мое веб-приложение библиотеку печати Brother b-Pac для устройств печати этикеток.Мне нужно создать / загрузить шаблон метки на сервере и распечатать с компьютера клиента через браузер.
Мой код полностью работает в моей среде разработки.Это происходит только в опубликованной версии.Это ошибка отказа в доступе, которая выдается, когда приложение вызывает объект COM.Я подозреваю, что есть внутреннее исключение, которого я не смог достичь.
Событие было зарегистрировано следующим образом:
Faulting application name: w3wp.exe, version: 8.5.9600.16384
Faulting module name: bpac.dll, version: 3.2.0.20
Exception code: 0xc0000005
Fault offset: 0x0010beea
Faulting application path: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Faulting module path: C:\Program Files (x86)\Common Files\Brother\b-PAC\bpac.dll
Я также использовал DebugDiag в файле дампа и вот отчет .Хотя здесь говорится, что отладчик не может найти символы отладки для bpac.dll
, поэтому он может быть неполным (если это поможет, я хотел бы знать, где и как получить символы для сторонних DLL)
Приложение представляет собой многослойное приложение ASP.NET MVC , предназначенное для .NET Framework 4.6.1 , работающее на виртуальной машине с Windows Server 2012 R2 (x64) и IIS 8 .(Если это имеет значение, проект получен из этого шаблона )
Я искал проблему и пытался найти следующие решения:
- Дать разрешения на чтение / запись для
wwwroot
и собственная папка DLL для IIS APPPOOL/user
неисправного w3wp.exe
. - . Предоставляют такие же разрешения для
IIS_IUSRS, NETWORK, NETWORK SERVICE
пользователей. - Олицетворение
Administrator
пользователей. - Удалите / установите 32-битные / 64-битные версии b-Pac SDK.
- Измените разрядность моего приложения ASP и всех проектов в x86 / x64.
- Включите 32-битную в пуле приложений.
- Исправление Windows для Обновление за июль 2018 года
- Настройка Анонимная аутентификация, удостоверение пула приложений и т. Д. Все для пользователя пула по умолчанию.
- Загрузка DLL динамически.(хотя я не уверен, что сделал это правильно)
COM-объект, который я пытаюсь инициализировать, - bpac.Document
.Интерфейс IDocument
и конкретный класс DocumentClass
.Я не был знаком ни с одной из этих концепций раньше.И я все еще пытаюсь понять, но я попробовал все эти следующие строки для инициализации:
Document label = new Document();
DocumentClass label = new DocumentClass(); //embed interop types: false
IDocument label = new Document();
После этого я использую объект метки, чтобы открыть шаблон и т. Д. Но как только приложениеУдаряя по любой из вышеперечисленных строк, он дает сбой серверу и перезапускает приложение.
Между прочим, файл DLL упоминается как библиотека COM в моем проекте WebService (App) (не в веб-проекте).Так что он не копируется в папку bin
(я полагаю, это правильное поведение?).Пробовал изменить настройки изоляции / взаимодействия, но я не уверен, связаны ли они с проблемой.
Я читаю вещи о Регистрация COM-объектов в GAC и Marshalling for RemoteДоступ , но я не мог понять, как правильно их применять.Дело в том, что официальная документация ничего не говорит об этом.И нет ни одного примера использования библиотеки b-Pac в современных настройках C # ASP.NET ( немного на VB ~ eww ~).
Я разработчик, а не администратор баз данных, поэтому я не слишком уверен в настройке сервера.Но только для этой проблемы я слишком много раз модифицировал слишком много вещей.