Ich habe eine App geschrieben, die seit Monaten gut funktioniert, in den letzten Tagen habe ich den Fehler unten nur auf der installierten Version erhalten.
Wenn ich den Quellcode in VS ausführen, funktioniert alles einwandfrei. Auch die .exe in den bin-Ordnern funktioniert einwandfrei. Es ist nur die installierte Version, die den Fehler erzeugt, wenn ich neu kompilieren und neu installieren bekomme ich den gleichen Fehler.
Ich bin ein bisschen ratlos, was dies verursacht und hoffte auf ein paar Hinweise. Es scheint zu sein, eine WebRequest-Antwort durch IE wird nicht zurückgegeben, aber ich bin ratlos, warum es funktioniert gut in VS ohne Fehler. Gibt es neue IE-Sicherheitsmaßnahmen/Policen, die dies verursachen können?
Dinge, die ich bis jetzt versucht habe, sind:
Die Ausnahme:
Exception: System.Windows.Markup.XamlParseException: The invocation of the constructor on type 'XApp.MainWindow' that matches the specified binding constraints threw an exception. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at XApp.HtmlRequest.getHtml(Uri uri) in J:\Path\MainWindow.xaml.cs:line 3759
at XApp.MainWindow.GetLinks() in J:\Path\MainWindow.xaml.cs:line 2454
at XApp.MainWindow..ctor() in J:\Path\MainWindow.xaml.cs:line 124
--- End of inner exception stack trace ---
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.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc)
at System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties)
at System.Windows.Application.DoStartup()
at System.Windows.Application.<.ctor>b__1(Object unused)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
Exception: System.Net.WebException: The remote server returned an error: (403) Forbidden.
at System.Net.HttpWebRequest.GetResponse()
at XApp.HtmlRequest.getHtml(Uri uri) in J:\Path\MainWindow.xaml.cs:line 3759
at XApp.MainWindow.GetLinks() in J:\Path\MainWindow.xaml.cs:line 2454
at XApp.MainWindow..ctor() in J:\Path\MainWindow.xaml.cs:line 124
EDIT:
Dies ist als eigenständige Anwendung installiert. Wenn ich als Administrator ausgeführt habe, habe ich den Programmordner geöffnet und die Exe als Administrator ausgeführt und nicht die Verknüpfung.
Der Code, der das Problem verursacht, ist dieser
private void GetLinks()
{
//Navigate to front page to Set cookies
HtmlRequest htmlReq = new HtmlRequest();
OLinks = new Dictionary<string, List<string>>();
string Url = "http://www.somesite.com/somepage";
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.CookieContainer = cookieJar;
request.Accept = @"text/html, application/xhtml+xml, */*";
request.Referer = @"http://www.somesite.com/";
request.Headers.Add("Accept-Language", "en-GB");
request.UserAgent = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)";
request.Host = @"www.somesite.com";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
String htmlString;
using (var reader = new StreamReader(response.GetResponseStream()))
{
htmlString = reader.ReadToEnd();
}
//More Code
}
Fügen Sie die folgende Zeile hinzu:
request.UseDefaultCredentials = true;
Dadurch kann die Anwendung die Anmeldedaten des angemeldeten Benutzers für den Zugriff auf die Website verwenden. Wenn sie 403 zurückgibt, erwartet sie eindeutig eine Authentifizierung.
Es ist auch möglich, dass Sie (jetzt?) einen authentifizierenden Proxy zwischen Ihnen und der entfernten Website haben. In diesem Fall sollten Sie es versuchen:
request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Hoffentlich hilft das.
Es sieht so aus, als ob das Problem auf einer Serverseite liegt.
In meinem Fall habe ich mit dem Paypal-Server gearbeitet und keine der vorgeschlagenen Antworten hat geholfen, sondern http://forums.iis.net/t/1217360.aspx?HTTP+403+Forbidden+error
Ich war mit diesem Problem konfrontiert und habe gerade die Antwort vom Paypal-Techniker erhalten. Fügen Sie dies hinzu, um das 403-Problem zu beheben.
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.UserAgent = "[beliebige Wörter, die mehr als 5 Zeichen sind]";
Es ist ein Berechtigungsfehler. Ihr VS läuft wahrscheinlich mit einem erhöhten Konto oder einem anderen Benutzerkonto als das des Benutzers, der die installierte Version verwendet.
Es kann hilfreich sein, die IIS-Berechtigungen zu überprüfen und festzustellen, welche Konten Zugriff auf die Ressource haben, auf die Sie zugreifen. Vergleichen Sie dies mit dem Konto, das Sie verwenden, und dem Konto, das die installierten Versionen verwenden.