Ich habe einen WebSocket-basierten Texteditor, den ich für ein College-Projekt geschrieben habe. Funktioniert auf meinem lokalen Computer einwandfrei, aber bei der Bereitstellung in Azure erhalte ich einen Fehler.Azure App gibt HRESULT E_FAIL wurde von einem Aufruf an eine COM-Komponente zurückgegeben
Das Problem entsteht mit der Konvertierung von HTML in RTF, die ich mit einer Mischung von Code aus here und here. Dies erforderte die Verwendung von Windows-Komponenten in einer Single-Thread-Wohnung und war ein wenig Kopfschmerzen, aber es hat funktioniert ... bis ich nach Azure migriert.
Debuggen in Visual Studio, bekam ich die Fehlermeldung:
System.Runtime.InteropServices.COMException was unhandled
ErrorCode=-2147467259
HResult=-2147467259
Message=Error HRESULT E_FAIL has been returned from a call to a COM component.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.Navigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
at System.Windows.Forms.WebBrowser.PerformNavigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
at System.Windows.Forms.WebBrowser.set_Url(Uri value)
at System.Windows.Forms.WebBrowser.set_DocumentStream(Stream value)
at System.Windows.Forms.WebBrowser.set_DocumentText(String value)
at RealTimeTextEditor.HtmlRtfConvertor.ConvertHtmltoRtf(Object obj) in C:\DissertationProjectGitRepo\RealTimeTextEditor\RealTimeTextEditor\HtmlRtfConvertor.cs:line 30
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart(Object obj)
InnerException:
Der problematische Code hier gefunden wird, tritt Ausnahme bei der Zeile "tempBrowser.DocumentText = data.html;"
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web;
using System.Windows.Forms;
namespace RealTimeTextEditor
{
public class HtmlRtfConvertor
{
public void ThreadConvertor(string inputpath, string inputhtml)
{
var t = new Thread(ConvertHtmltoRtf);
var dataForConversion = new ConvertorData { path = inputpath, html = inputhtml };
t.SetApartmentState(ApartmentState.STA);
t.Start(dataForConversion);
t.Join();
}
public static void ConvertHtmltoRtf (object obj)
{
var data = obj as ConvertorData;
using (WebBrowser tempBrowser = new WebBrowser())
{
tempBrowser.CreateControl();
tempBrowser.DocumentText = data.html;
while (tempBrowser.DocumentText != data.html)
{
Application.DoEvents();
}
tempBrowser.Document.ExecCommand("SelectAll", false, null);
tempBrowser.Document.ExecCommand("Copy", false, null);
using (RichTextBox rtb = new RichTextBox())
{
rtb.Paste();
rtb.SaveFile(data.path);
}
}
}
public class ConvertorData
{
public string path { get; set; }
public string html { get; set; }
}
}
}
Der Code-Controller, der die HTML-Konverter-Klasse ruft:
HtmlRtfConvertor convertor = new HtmlRtfConvertor();
convertor.ThreadConvertor(path, html);
Wo haben Sie bereit: Web-Anwendungen? Cloud-Service (Web/Arbeiter)? vm? –
@David Makogon - es ist eine Web-App, die eine Verbindung zu einer SQL-Datenbank herstellt. –