Saya telah menulis aplikasi yang telah bekerja dengan baik selama berbulan-bulan, dalam beberapa hari terakhir saya mendapatkan kesalahan di bawah ini hanya pada versi yang diinstal.
Jika saya menjalankan kode sumber di VS semuanya berfungsi dengan baik. Juga, .exe di folder bin berfungsi dengan baik. Hanya versi yang terinstal yang menghasilkan kesalahan, jika saya mengkompilasi ulang dan menginstal ulang saya mendapatkan kesalahan yang sama.
Saya agak bingung apa yang menyebabkan hal ini dan berharap ada beberapa petunjuk. Tampaknya respons WebRequest melalui IE tidak dikembalikan tetapi saya bingung mengapa itu berfungsi dengan baik di VS tanpa kesalahan. Apakah ada tindakan / kebijakan keamanan IE baru yang dapat menyebabkan hal ini?
Hal-hal yang telah saya coba sejauh ini termasuk:
Pengecualian:
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:
Ini diinstal sebagai aplikasi mandiri. Ketika saya menjalankannya sebagai Administrator, saya membuka folder program dan menjalankan exe sebagai administrator, bukan sebagai pintasan.
Kode yang menyebabkan masalah ini adalah sebagai berikut
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
}
Tambahkan baris berikut ini:
request.UseDefaultCredentials = true;
Ini akan memungkinkan aplikasi menggunakan kredensial pengguna yang masuk untuk mengakses situs. Jika mengembalikan 403, jelas itu mengharapkan otentikasi.
Mungkin juga Anda (sekarang?) memiliki proxy yang mengautentikasi di antara Anda dan situs jarak jauh. Dalam hal ini, cobalah:
request.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Semoga ini membantu.
Sepertinya masalah didasarkan pada sisi server.
Dalam kasus saya, saya bekerja dengan server paypal dan tidak ada jawaban yang disarankan yang membantu, tetapi http://forums.iis.net/t/1217360.aspx?HTTP+403+Forbidden+error
Saya menghadapi masalah ini dan baru saja mendapat balasan dari teknis Paypal. Tambahkan ini akan memperbaiki masalah 403.
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.UserAgent = "[kata apa saja yang lebih dari 5 karakter]";
Ini adalah kesalahan perizinan. VS Anda mungkin berjalan menggunakan akun yang lebih tinggi atau akun pengguna yang berbeda dari pengguna yang menggunakan versi yang diinstal.
Mungkin berguna untuk memeriksa izin IIS Anda dan melihat akun apa yang memiliki akses ke sumber daya yang Anda akses. Referensi silang dengan akun yang Anda gunakan dan akun yang digunakan versi yang diinstal.