DLLImport не работает на Azure Служба приложений Net. 3,1 - PullRequest
1 голос
/ 17 апреля 2020

Я недавно добавил не C# dll к моей службе a, которая действует как HTTP Клиент . На моей локальной машине (Windows 10) все работает отлично. При попытке отправить запрос на Azure я получаю следующий ответ.

  <h3>There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server.</h3> 

Разработчик dll и я отладили (VS Remote Debug) Службу приложений, и это исключение возникает, когда мы впервые попробовали использовать DllImport. Он утверждает, что в данный момент нет сетевого запроса. Но в любом случае он пытался исправить ошибку прокси в dll, но она все равно не работает на Azure. DLL зависит от kernel.dll и msvcrt.dll не должно быть проблемой?

В App Insight я получаю это исключение одновременно, отправляю запрос, но не уверен, связаны ли исключения: сборка при запуске Microsoft.AspNetCore.AzureAppServices.HostingStartup не удалось выполнить. Смотрите внутреннее исключение для более подробной информации. Не удалось загрузить файл или сборку 'Microsoft.AspNetCore.AzureAppServices.HostingStartup, Culture = нейтральный, PublicKeyToken = null'. Система не может найти указанный файл.

SystemInfo: версия ОС: Microsoft Windows NT 10.0.14393.0 64-битная система: True 64-битный процесс: False Количество процессоров: 4

DLL находится на сервере с верной версией.

Здесь происходит исключение:

    [DllImport(LIB_32, EntryPoint = SYMBOL_FREE)]
    internal static extern void Free32(IntPtr response);

    [DllImport(LIB_64, EntryPoint = SYMBOL_FREE)]
    internal static extern void Free64(IntPtr response);

    [DllImport(LIB_32, EntryPoint = SYMBOL_INVOKE)]
    internal static extern IntPtr Invoke32([In] byte[] request);

    [DllImport(LIB_64, EntryPoint = SYMBOL_INVOKE)]
    internal static extern IntPtr Invoke64([In] byte[] request);

    protected override IntPtr PerformInvokeForArchitecure(byte[] request)
    {
        if (Is64BitSystem)
        {
            return Invoke64(request);
        }

        return Invoke32(request);
    }

1 Ответ

1 голос
/ 17 апреля 2020

Эта проблема не может быть решена, потому что мы не можем зарегистрировать эту dll непосредственно на Azure, и я не могу попытаться выполнить динамическую c загрузку с кодом. Для загрузки этой библиотеки рекомендуется использовать Azure Container или virtual machine.

...