Создание 3D визуала в памяти с использованием WPF в веб-приложении.Работает в Кассини, не в IIS - PullRequest
2 голосов
/ 12 января 2011

Немного странное название, но вот сделка. Для веб-сайта, над которым я работаю, нам нужно генерировать квази-3D изображения на лету. В основном, это для художественного сайта, и нам нужно показать 3D-представление Canvas с двухмерным изображением (jpg). (См. здесь для некоторого контекста.) Наш подход заключается в том, чтобы использовать API-интерфейс WPF 3D и создать Viewport3D в коде, добавить к нему несколько точек с правильными размерами и затем применить текстуры из оригинального JPG соответственно.

Во время тестирования я все время тестировал его в среде песочницы и на встроенном веб-сервере Cassini в Visual Studio. При попытке перенести его в реальное хранилище кода и проверить его там он перестал работать. Выкачанное изображение имеет правильный размер, но оно полностью пустое. Это абсолютно черное. После нескольких часов удара головой о стену я понял, что это проблема IIS.

Я создал простой пример приложения, чтобы продемонстрировать проблему (не добавляет изображения, хотя он просто окрашивает все стороны в зеленый цвет), однако, поскольку большая часть кода в значительной степени не имеет отношения к вопросу, я не буду его здесь ставить, скорее Выложу ссылку на него:

http://www.box.net/shared/55bznpfns1

Если вы загрузите его и захотите запустить, в коде Default.aspx вы увидите это:

    protected void buttonClick(object sender, EventArgs e)
    {
        var path = @"C:\test\output\output.png";
        IISvsCassini.WpfImageCreator.CreateWPFImage(path);
    }

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

Если вы попробуете этот пример в Visual Studio с Cassini, он будет работать нормально, и у вас должен быть новый файл с именем «output.png», который имеет зеленый 3D-куб. Если вы попробуете это в IIS, вы получите пустое изображение.

Несколько замечаний: прежде чем кто-либо спросит, да, я дал всем нужным папкам правильные разрешения. Я также делаю фактическое создание 3D и сохранение изображения в отдельном потоке с состоянием квартиры, установленным в STA.

Я знаю, что это немного необычный случай слияния WPF и ASP.Net, но у кого-то есть какие-нибудь идеи? Есть ли какие-то настройки в IIS, которые мне нужно изменить? Есть ли какое-то ограничение на API-интерфейс WPF, которое не позволяет запускать его из IIS?

Ответы [ 2 ]

1 голос
/ 13 января 2011

Ну, это отстой:

https://connect.microsoft.com/VisualStudio/feedback/details/361469/net-3-5-sp1-breaks-use-of-wpf-under-iis

Оказывается, это не поддерживается. Кажется, что это было в какой-то момент, но больше не работает. Настоящий позор ... Он также не работает изнутри службы Windows, но он работает в Cassini и в консольном приложении. Ну хорошо.

1 голос
/ 13 января 2011

Если вы работаете на 2008 Server, который был установлен в качестве основного сервера (без пользовательского интерфейса), биты WPF + драйверы, необходимые DUCE и MILCORE для рендеринга, отсутствуют для RenderTargetBitmap () и других.MS делает это, чтобы уменьшить поверхность атаки на сервер и надежность.

К сожалению, вы не можете перейти с Core Server на Full, вам необходимо переустановить ОС - https://serverfault.com/questions/4945/install-gui-on-windows-server-2008-core

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...