2012-03-29 1 views
0

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; 
} 
+1

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. –

Antwort

0

An jeden anderen, der dieses Problem hat. Ich habe jedes Mal ein neues Benutzersteuerelement erstellt, seinen DataContext festgelegt und in PNG konvertiert. Erstellen Sie stattdessen einfach das UserControl am Anfang und behalten Sie es und verwenden Sie es erneut.