System net webexception удаленный сервер возвратил ошибку

I’ve written an app that has worked fine for months, in the last few days I’ve been getting the error below on the installed version only.

If I run the source code in VS everything works fine. Also, the .exe in the bin folders work fine. It’s only the installed version which generates the error, if I recompile and reinstall I get the same error.

I’m a bit stumped as to what’s causing this and hoped for a few pointers. It seems to be a WebRequest response through IE is not being returned but I’m stumped as to why it works fine in VS without any errors. Are there any new IE security measures/polices that may cause this?

Things I’ve tried so far include:

  • Disabled all AntiVirus & Firewall
  • Run as Administrator

The Exception:

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:

This is installed as a standalone app. When I’ve run as Administrator, I’ve opened the program folder and run the exe as administrator rather than the shortcut.

The code that causes the issue is this

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


 }

Иногда веб-серверы фильтруют клиентов (браузеры, программные веб-клиенты, etc) по HTTP-заголовку User-Agent. И в зависимости от значения этого заголовка веб-сервер может принят решение о вполне определенном ответе клиенту.

В конкретно этом случае веб-сервер (h92761ae.beget.tech) «не любит» обращения от «не реальных» браузеров, например:

curl http://h92761ae.beget.tech/json_devices.php

вернет код 403 Forbidden. Так как User-Agent в этом случае был curl/7.29.0

Поэтому нам можно попробовать притвориться реальным браузером с User-Agent-ом, например, Mozilla/5.0. И это решит данную проблему.

WebClient _webClient = new WebClient { Encoding = Encoding.UTF8 };
_webClient.Headers["User-Agent"] = "Mozilla/5.0";
var devices = _webClient.DownloadString("http://h92761ae.beget.tech/json_devices.php");
Console.WriteLine(devices);

Естественно, такой подход не решит проблемы, если вам будет запрещено ходить на этот сервер, например, по ip-адресу. Но это уже не вопрос данной темы.

  • Remove From My Forums
  • Вопрос

  • Пишу приложение на Silverlight 4+WCF. На одной из страниц обращаюся к веб-камере и делаю снимок, который потом через веб-сервис отправляю в базу данных MSSQL. Когда передаю масив байтов в котором содержится снимок (размерность масива всегда передается одинаковая
    — [1228800]) получаю ошибку из веб-сервиса — Удаленный сервер возвратил ошибку Not Found. Что делать?

    Я пробовал отсылать пустой масив такой же размерности — все равно та же ошибка. Мой веб-конфиг:

    <?xml version="1.0"?>
    <!--
      Дополнительные сведения по настройке приложения ASP.NET см. по ссылке
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    <configuration>
    	<connectionStrings>
      <add name="UserBaseConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"
       providerName="System.Data.SqlClient" />
     </connectionStrings>
    	<system.serviceModel>
    		<bindings>
    			<basicHttpBinding>
    				<binding name="ServicesBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" openTimeout="0:1:0" receiveTimeout="0:1:0" sendTimeout="0:1:0" closeTimeout="0:1:0">
    					<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
    				</binding>
    			</basicHttpBinding>
    		</bindings>
    		<services>
    			<service behaviorConfiguration="Shmel.Web.MyServiseBehavior" name="Shmel.Web.MyServise">
    				<endpoint address="" binding="basicHttpBinding" bindingConfiguration="ServicesBinding" contract="Shmel.Web.IMyServise">
    					<identity>
    						<dns value="localhost"/>
    					</identity>
    				</endpoint>
    			</service>
    		</services>
    		<behaviors>
    			<serviceBehaviors>
    				<behavior name="Shmel.Web.MyServiseBehavior">
    					<serviceMetadata httpGetEnabled="true"/>
    					<serviceDebug includeExceptionDetailInFaults="false"/>
    				</behavior>
    				<behavior name="">
    					<serviceMetadata httpGetEnabled="true"/>
    					<serviceDebug includeExceptionDetailInFaults="false"/>
    				</behavior>
    			</serviceBehaviors>
    		</behaviors>
    		<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
    	</system.serviceModel>
    	<system.web>
    		<compilation debug="true"/></system.web></configuration>
    

    Помогите.

Ответы

  • я забрал, но та же ошибка. к тому же другие методы работают прекрасно, так что проблема не в idenity.

    Я думаю что проблема в самом масиве, может он слишком большой чтобы его передавать? Но в конфиге все на максимум настроил.

    Если передавать масив меньше, то все работает.

    ах да, вот еще ClientConfig

    <configuration>
        <system.serviceModel>
            <bindings>
                <basicHttpBinding>
                    <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647"
                        maxReceivedMessageSize="2147483647" >
                        <security mode="None" />
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="http://localhost:49160/Service1.svc" binding="basicHttpBinding"
                    bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
                    name="BasicHttpBinding_IService1" />
            </client>
        </system.serviceModel>
    </configuration>
    
    • Изменено

      24 июня 2012 г. 9:02

    • Помечено в качестве ответа
      Abolmasov DmitryModerator
      29 июня 2012 г. 7:23

  • «Я думаю что проблема в самом масиве, может он слишком большой чтобы его передавать?» — да, именно так. По умолчанию конфигурация такова, чтобы принимать маленькие порции данных, защитив таким образом от DoS атак.
    «Но в конфиге все на максимум настроил.» — видимо настройки не те. Нужно разбираться дальше в настройках, сам пока я с этим не сталкивался. А как одно из решений: можете отправлять данные порциями, а потом объединять их на сервере.

    • Помечено в качестве ответа
      Abolmasov DmitryModerator
      29 июня 2012 г. 7:23

  • Сначала, нужно точно определить, что за ошибка. Not Found — значит, что произошла ошибка сервера и за ней может скрываться все, что угодно.

    Для того, чтобы точно определить ошибку, попробуйте использоваться Fiddler2.

    Также можете добавить сл. строки в web.config — этим Вы включите трасировку WCF и сможете узнать, какая на самом деле ошибка произошла по логам сервиса (в папке c:\temp\).

     <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity="true">
            <listeners>
              <add type="System.Diagnostics.XmlWriterTraceListener" name="ServiceModel" initializeData="c:\temp\server.svclog">
                <filter type="" />
              </add>
            </listeners>
          </source>
        </sources>
        <trace autoflush="true" />
      </system.diagnostics>

    • Помечено в качестве ответа
      Abolmasov DmitryModerator
      29 июня 2012 г. 7:23

Я написал приложение, которое отлично работало в течение нескольких месяцев, в последние несколько дней я получал ошибку ниже только в установленной версии.

Если я запускаю исходный код в VS, все работает нормально. Кроме того, файл .exe в папках bin работает нормально. Это только установленная версия, которая генерирует ошибку, если я перекомпилирую и переустановить, я получаю ту же ошибку.

Я немного озадачен тем, что вызывает это, и надеялся на несколько указателей. Кажется, что ответ WebRequest через IE не возвращается, но я в тупике, почему он отлично работает в VS без каких-либо ошибок. Существуют ли какие-либо новые меры/меры безопасности IE, которые могут вызвать это?

Вещи, которые я пробовал до сих пор, включают:

  • Отключено все антивирус и брандмауэр
  • Запуск от имени администратора

Исключение:

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:

Это установлено как отдельное приложение. Когда я запускаю Администратор, я открыл папку программы и запускаю exe как администратор, а не ярлык.

Код, вызывающий проблему, это

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


 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//
using System.IO;
using System.Xml.Linq;
using System.Net;
using System.Web;
 
 
namespace rsh
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            button1.PerformClick();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string[] st = richTextBox1.Lines; 
            string langTo = "ru"; // Я зык на который нужно перевести
 
            Test1(st, langTo);
        }
 
 
        public void Test1(string[] args, string langTo)
        // static void Test1(string[] args, string langTo)
        {
            try
            {
                // инфо сообщение
                // string languagesForTranslate = "албанский sq,\nанглийский en,\nарабский ar,\nармянский hy,\nазербайджанский az,\nафрикаанс af,\nбаскский eu,\nбелорусский be,\nболгарский bg,\nбоснийский bs,\nваллийский cy,\nвьетнамский vi,\nвенгерский hu,\nгаитянский(креольский) ht,\nгалисийский gl,\nголландский nl,\nгреческий el,\nгрузинский  ka,\nдатский da,\nиврит he,\nиндонезийский id,\nирландский  ga,\nитальянский it,\nиспанский es,\nказахский  kk,\nкаталанский ca,\nкиргизский  ky,\nкитайский zh,\nкорейский ko,\nлатынь  la,\nлатышский   lv,\nлитовский   lt,\nмалагасийский   mg,\nмалайский   ms,\nмальтийский mt,\nмакедонский mk,\nмонгольский mn,\nнемецкий de,\nнорвежский  no,\nперсидский  fa,\nпольский  pl,\nпортугальский pt,\nрумынский ro,\nрусский ru,\nсербский sr,\nсловацкий sk,\nсловенский  sl,\nсуахили sw,\nтаджикский  tg,\nтайский th,\nтагальский  tl,\nтатарский   tt,\nтурецкий tr,\nузбекский   uz,\nукраинский  uk,\nфинский fi,\nфранцузский fr,\nхорватский  hr,\nчешский cs,\nшведский sv,\nэстонский   et,\nяпонский ja";
                // Console.WriteLine("Перечень языков перевода\n\n" + languagesForTranslate + "\n"); 
 
                // string text = File.ReadAllText(args[0]);
 
                string text = args[0];
 
                TextTranslationAPI api = new TextTranslationAPI();
 
                TranslateCommand languageOfText = new TranslateCommand
                {
                    Type = RequestType.Detect,
                    Parameters = new Dictionary<string, string> { { "text", text } },
                    ResultSelector = x => x.Attribute("lang").Value
                };
 
                string languageFrom = api.GetResult(languageOfText);
 
                //Console.WriteLine("Язык текста для перевода " + languageFrom + "\n");
                //Console.WriteLine("Выберите из перечня языков, язык на который будет переводится текст в вашем файле:\n");
                //Console.WriteLine("Пример: -en\n");
 
 
                // string languageTo = Console.ReadLine(); // ИСХ
                string languageTo = langTo;
 
                string translateLanguage = languageFrom + languageTo;
                TranslateCommand translate = new TranslateCommand
                {
                    Type = RequestType.Translate,
                    Parameters = new Dictionary<string, string> { { "lang", translateLanguage }, { "text", text } },
                    ResultSelector = x => x.Element("text").Value
                };
                string result = api.GetResult(translate);
 
                richTextBox2.Text = result;
 
                string adresOutPutFile = string.Format(@"C:\Temp\{0}.txt", translateLanguage);
                File.WriteAllText(adresOutPutFile, result);
            }
            catch (Exception ex)
            {
                richTextBox3.Text += ex.ToString();
                richTextBox3.Text += "ОШИБКА, НЕВЕРНО ВВЕЛИ ЯЗЫК НА КОТОРЫЙ БУДЕТ ПЕРЕВОДИТСЯ ТЕКСТ В ВАШЕМ ФАЙЛЕ: " + ex.Message;
                // Console.WriteLine("ОШИБКА, НЕВЕРНО ВВЕЛИ ЯЗЫК НА КОТОРЫЙ БУДЕТ ПЕРЕВОДИТСЯ ТЕКСТ В ВАШЕМ ФАЙЛЕ: " + ex.Message);
            }
 
        }
 
 
        enum RequestType
        {
            Translate,
            Detect
        }
 
        struct TranslateCommand
        {
            public RequestType Type;
            public Dictionary<string, string> Parameters;
            public Func<XElement, string> ResultSelector;
        }
 
        class TextTranslationAPI
        {
 
            private readonly string Url;
            private readonly string Key;
            public TextTranslationAPI(string url, string key)
            {
                Url = url;
                Key = key;
            }
            
            public TextTranslationAPI() : this(@"https://translate.yandex.net/api/v1.5/tr/translate/", "trnsl.1.1.20180930T111308Z.5e8e8b704ad292c9.f7780e2f1ef62bd0d0301cae74e677ef8a62be7a")
            { }
 
            private string GetAction(RequestType type)
            {
                switch (type)
                {
                    case RequestType.Detect:
                        return "detect";
                    case RequestType.Translate:
                        return "translate";
                    default:
                        throw new ArgumentOutOfRangeException();
                }
            }
 
            public string GetResult(TranslateCommand command)
            {
 
                string strUrl = Url + GetAction(command.Type) + "?key=" + Key;
                foreach (var parameter in command.Parameters)
                    strUrl += "&" + parameter.Key + "=" + HttpUtility.UrlEncode(parameter.Value);
 
                
                WebClient webClitnt = new WebClient();
                webClitnt.Encoding = Encoding.UTF8;
 
                string stringXml = webClitnt.DownloadString(strUrl); // ОШИБКА
                XDocument document = XDocument.Parse(stringXml);
                string textTranslate = command.ResultSelector(document.Root);
 
                return textTranslate;
            }
 
        }
 
        
    }
}

Понравилась статья? Поделить с друзьями:
  • Sv0436 fanuc ошибка что делать
  • System freinage defaillant ситроен с4 ошибка
  • Sv0411 ошибка fanuc
  • Sv0410 fanuc ошибка excess error
  • Sysprep ошибка 0x0f0070