Использование WPF для генерации изображений в службе WCF - PullRequest
0 голосов
/ 29 марта 2012

Я генерирую изображения WPF .png в моей службе WCF.Некоторое время все работает хорошо, но в итоге я получаю эту ошибку:

    System.Windows.Markup.XamlParseException: Initialization of 'System.Windows.Controls.TextBlock' threw an exception. --->
System.ComponentModel.Win32Exception: The system cannot find the file specified
   at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
   at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
   at System.Windows.SystemResources.EnsureResourceChangeListener()
   at System.Windows.SystemResources.FindResourceInternal(Object key, Boolean allowDeferredResourceReference, Boolean
mustReturnDeferredResourceReference)
   at System.Windows.StyleHelper.GetThemeStyle(FrameworkElement fe, FrameworkContentElement fce)
   at System.Windows.FrameworkElement.UpdateThemeStyleProperty()
   at System.Windows.FrameworkElement.OnInitialized(EventArgs e)
   at System.Windows.FrameworkElement.TryFireInitialized()
   at System.Windows.FrameworkElement.EndInit()
   at MS.Internal.Xaml.Runtime.ClrObjectRuntime.InitializationGuard(XamlType
xamlType, Object obj, Boolean begin)
   --- End of inner exception stack trace ---
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader
xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at System.Windows.Application.LoadComponent(Object component, Uri
resourceLocator)

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

ASP.NET выдает Win32Exception при создании BitmapImage, не может найти указанный файл http://www.thejoyofcode.com/Generating_images_using_WPF_on_the_Server.aspx

Однако я пока не нашелметод, который работает.Может кто-то, пожалуйста, опубликовать код, который не выдает эту ошибку или, по крайней мере, может как-то обойти это.Вот что делает мой сервис:

// Only one copy of the dispatcher (I have tried creating a new one each time too).
private BackgroundStaDispatcher dispatcher = new BackgroundStaDispatcher();
public Stream GetImage()
{
    WebOperationContext.Current.OutgoingResponse.ContentType = "image/png";
    Stream stream = null;
    this.dispatcher.Invoke(
        () =>
        {
            UserControl userControl = new UserControl()
            {
                DataContext = "Hello World"
            };
            // Use PngBitmapEncoder to convert the control to a bitmap.
            stream = userControl.ToPng(173, 173);
        });
    return stream;
}

1 Ответ

0 голосов
/ 08 октября 2012

Для всех, кто имеет эту проблему. Я каждый раз создавал новый UserControl, устанавливая его DataContext и преобразовывая его в PNG. Вместо этого просто создайте UserControl один раз в начале, удерживайте его и используйте повторно.

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