Ich erstelle WPF-PNG-Bilder in meinem WCF-Dienst. Ich bekomme alles funktioniert gut für eine Weile, aber schließlich diesen Fehler:Verwenden von WPF zum Generieren von Bildern in einem WCF-Dienst
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)
Ich habe noch nie vor Ort diese Fehler der Lage zu schaffen, nur auf meinem Rechner Webserver. Ich habe darunter mehrere Fixes und Workarounds versucht:
ASP.NET Throws Win32Exception when creating BitmapImage, cannot find file specified http://www.thejoyofcode.com/Generating_images_using_WPF_on_the_Server.aspx
Allerdings habe ich noch eine Methode zu finden, die funktioniert. Kann jemand bitte etwas Code posten, der diesen Fehler nicht wirft oder zumindest irgendwie umgehen kann. Dies ist, was mein Dienst tut:
// 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;
}
Ich nehme eine Vermutung, aber ich denke, es könnte etwas mit der Verwendung eines UserControl vom Webserver zu tun haben. Ich denke, dass Sie ein Benutzersteuerelement von einer Webanwendung nicht instanziieren können, und deshalb erhalten Sie den Fehler. Die lokale Testkonfiguration verfügt wahrscheinlich über die Berechtigung zum Erstellen von Benutzersteuerelementen, das Web jedoch wahrscheinlich nicht. –