C# ComVisible DLL может использоваться только IIS, когда подключен удаленный рабочий стол

Я создал ComVisible DLL, которая подписана с данным доменным именем (компания, в которой я работаю). Я помещаю эту DLL-библиотеку на хост-компьютер клиента, который работает в другом домене, и регистрирую его, используя: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs

DLL создает файл XLSX на диске, локальном для веб-узла клиента. Пользователь может загрузить этот файл с помощью браузера.

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

Однако, как только я прекращаю сеанс удаленного рабочего стола (я не выхожу из системы и оставляю VPN подключенным), DLL больше не доступна. Временный файл больше не создается классическим сайтом asp, и клиент, конечно, не может передать потоковый файл, который не был создан.

Есть мысли о том, что может вызвать это? Веб-сервер не генерирует ошибок.

Я полагал, что DLL подписана другим доменным именем, тогда как хосты веб-сервера являются частью проблемы, но не могу себе представить, почему наличие открытого сеанса удаленного рабочего стола (я просто использую mstsc от Microsoft) решает проблему.

2 ответа

В конце я удалил следующий код из AssemblyInfo.cs:

[assembly: ComVisible(true)]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationAccessControl(false,
    AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent)]

Я переместил ComVisible и мой вызов Guid в качестве декоратора для класса, который я хочу представить в COM, и теперь DLL всегда создается правильно и работает без ошибок.

Я также сейчас регистрируюсь, используя:

RegAsm.exe d:\foo\bar.dll /codebase /tlb

Если вы работаете с файлами XLSX и получаете такое поведение, я вполне уверен, что вы используете классы Office.Interop для этого. Использование этих классов взаимодействия COM не поддерживается внутри IIS. Если вы попытаетесь использовать его из IIS, вы получите поведение, точно такое, как вы описали.

Чтобы создать файлы XLSX, вы должны переключиться на другую библиотеку, например Open XML SDK для Office.

Причина, по которой он работает, как только вы подключитесь к RDP, заключается в том, что для взаимодействия DLL необходим сеанс рабочего стола для правильной работы. Пока вы RDPed, существует сеанс для его использования, после того как вы отключитесь, сеанс больше не будет для него.

Другие вопросы по тегам