Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 177
1

ArgumentNullException после развертывания сайта на WebForms

08.07.2017, 13:05. Просмотров 415. Ответов 9
Метки нет (Все метки)

Доброго времени суток.
При запуске на локальном сервере все отрабатывает без ошибок. Когда залил на хостинг, выходят такие ошибки:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
[ArgumentNullException: Value cannot be null.
Parameter name: html]
   HtmlAgilityPack.HtmlDocument.LoadHtml(String html) +165
   SeoKnife.SiteAnaliz.FindSystems() +322
   SeoKnife.SiteAnaliz.Analiz() +62
   SeoKnife.SiteAnaliz.CleanUrl(String url) +181
   SeoKnife.siteanaliz.SiteUrlButton_Click(Object sender, EventArgs e) +38
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9819334
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639
Все методы и переменные проинициализированы, пробывал убирать гетеры и сетеры, ничего не помогает, не знаю в чем проблема.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2017, 13:05
Ответы с готовыми решениями:

Ошибка 500.19 после развёртывания веб-публикацией
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> ...

Нет доступа к БД после развертывания WCF сервиса
Доброго времени! Работаю на VS Express 2013. Есть простой проект на Silverlight со службой WCF...

После развертывания проекта с БД Access программа не находит базу
Здравствуйте! У меня возникла следующая проблема. Есть проект, написанный на Visual Studio 2010,...

WCF RIA приложение не работает после развертывания на локальном IIS
Помогите! Не могу найти причину. Сроки все вышли... 1. Развернула wcf ria приложение на локальном ...

9
OwenGlendower
Супер-модератор
Эксперт .NET
11568 / 9745 / 4079
Регистрация: 17.03.2014
Сообщений: 19,425
Записей в блоге: 1
Завершенные тесты: 2
08.07.2017, 13:11 2
Леонид Каруна, ошибка ясно говорит что аргумент html переданный методу HtmlDocument.LoadHtml равен null. Почему это происходит тебе должно быть виднее - у тебя перед глазами весь код.
0
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 177
08.07.2017, 13:35  [ТС] 3
Он не может быть равен null, если бы он был null, не работали бы все остальные методы. Сделал проверку на null, все равно не работает.

Конструкция проекта простая, есть метод GetPageText, в котором с помощью WebClient получаем исходный код сайта, сам код помещаем в переменную string, которая уже передается в остальные методы, остальные методы же работают с исходным кодом сайта в переменной. На локале все работает, на хостинге нет, ни каких похожих проблем найти не смог.
0
OwenGlendower
Супер-модератор
Эксперт .NET
11568 / 9745 / 4079
Регистрация: 17.03.2014
Сообщений: 19,425
Записей в блоге: 1
Завершенные тесты: 2
08.07.2017, 13:39 4
Леонид Каруна, специально обманывать тебя никто не будет. Раз исключение говорит что аргумент равен null значит он null. Показывай код страницы и необходимых методов. Не видя код можно только гадать.
0
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 177
08.07.2017, 13:42  [ТС] 5
Вот пример самых первых 2-ух методов на которые ругается.

Вызов метода для очистки домена :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  public void CleanUrl(string url)
        {
            string CleanUrl = "";
            if (url.Contains("https://"))
            {
                CleanUrl = url.Substring(8);
                Url = "http://" + CleanUrl;
            }
            else if (url.Contains("http://") == false && url.Contains("https://") == false)
            {
                Url = "http://" + url;
            }
            else
            {
                Url = url;
            }
            GetPageText(Url, false);
        }
Получение страницы :

C#
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
private static string GetPageText(string url, bool flag)
        {
            try
            {
                WebClient client = new WebClient();
                client.Headers.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)");
                if (flag == false)
                {
                    var request = (HttpWebRequest)WebRequest.Create(url);
                    var response = (HttpWebResponse)request.GetResponse();
 
                    using (Stream data = client.OpenRead(url))
                    {
                        if (response.CharacterSet == "windows-1251")
                        {
                            using (StreamReader reader = new StreamReader(data, encoding: System.Text.Encoding.GetEncoding("windows-1251")))
                            {
                                IsSiteOkey = true;
                                return reader.ReadToEnd();
                            }
                        }
                        else
                        {
                            using (StreamReader reader = new StreamReader(data, encoding: System.Text.Encoding.UTF8))
                            {
                                IsSiteOkey = true;
                                return reader.ReadToEnd();
                            }
                        }
 
                    }
                }
                else
                {
                    using (Stream data = client.OpenRead(url))
                    {
                        using (StreamReader reader = new StreamReader(data, encoding: System.Text.Encoding.UTF8))
                        {
                            IsSiteOkey = true;
                            return reader.ReadToEnd();
                        }
                    }
                }
            }
            catch (Exception ex) { IsSiteOkey = false; }
            return null;
        }
0
OwenGlendower
Супер-модератор
Эксперт .NET
11568 / 9745 / 4079
Регистрация: 17.03.2014
Сообщений: 19,425
Записей в блоге: 1
Завершенные тесты: 2
08.07.2017, 14:03 6
Леонид Каруна, 1) смотрим на метод GetPageText и что же мы видим?
C#
1
2
3
4
5
6
7
8
9
10
private static string GetPageText(string url, bool flag)
{
    try
    {
        WebClient client = new WebClient();
        ...
    }
    catch (Exception ex) { IsSiteOkey = false; }
    return null;
}
Что по твоему вернет метод в случае исключения?

2) Метод CleanUrl вызывает GetPageText, но не сохраняет результат. Зачем тогда качать сайт?

3) В трассировке стека видна следующая последовательность вызовов
HtmlAgilityPack.HtmlDocument.LoadHtml(String html) +165
SeoKnife.SiteAnaliz.FindSystems() +322
SeoKnife.SiteAnaliz.Analiz() +62
SeoKnife.SiteAnaliz.CleanUrl(String url) +181
SeoKnife.siteanaliz.SiteUrlButton_Click(Object sender, EventArgs e) +38
Чтобы понять почему html = null нужно видеть всю цепочку. Ты же показал только CleanUrl который даже не содержит вызова Analiz.

4) Метод GetPageText объявлен как static и значит переменная IsSiteOkey которая используется как признак успешной проверки тоже static. В веб-приложении так делать неправильно. Переменная будет путаться между разными запросами. Лучше использовать out параметр, отдельный класс для результата или tuple-ы если у тебя C# 7
1
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 177
08.07.2017, 14:13  [ТС] 7
Вот сам запуск анализа:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 private void Analiz()
        {
            if (IsSiteOkey == true)
            {
                BasicInfo();
                GetAllLinks();
                GetEncoding();
                GetPageSize();
                ServerInfo();
                FindSystems();
                IndexedPages();
                HtmlErrors();
                Mobile();
            }
            else { }
        }
Если бы значение было null, то не зашло бы в эти методы.
На локале все работает, раз 50 проверял, закинул на хост и сразу ошибки по всем методам. И не проверишь по чему, на локале хоть отдебажить можно.
0
OwenGlendower
Супер-модератор
Эксперт .NET
11568 / 9745 / 4079
Регистрация: 17.03.2014
Сообщений: 19,425
Записей в блоге: 1
Завершенные тесты: 2
08.07.2017, 14:18 8
Леонид Каруна, дружище, ты продолжаешь показывать обрывки кода по которым можно строить только косвенные выводы. В трассировке стека есть вызов метода FindSystems и значит условие if (IsSiteOkey == true) было истинно в момент проверки. Почему это так по приведенном коду точно не скажешь. Возможно потому что переменная IsSiteOkey static и в ней перепутались значения от разных запросов к сайту.
0
Леонид Каруна
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 177
08.07.2017, 14:23  [ТС] 9
Как всегда чудо свершилось. И вы помогли) к строке добавил :
C#
1
catch (Exception ex) { IsSiteOkey = false; return "Error"; }
И все заработало. Если посмотреть по контенту который отобразился, оно не разу не заходило в Catch, но с
C#
1
return null;
не работало.
0
OwenGlendower
Супер-модератор
Эксперт .NET
11568 / 9745 / 4079
Регистрация: 17.03.2014
Сообщений: 19,425
Записей в блоге: 1
Завершенные тесты: 2
08.07.2017, 14:29 10
Леонид Каруна, это не исправление ошибки, а только её маскировка. Советую избавиться от переменной IsSiteOkey и переписать код вызывающий GetPageText так чтобы везде были проверки на null результат. Также крайне рекомендую добавить протоколирование исключений чтобы хотя бы знать что они просходят.
0
08.07.2017, 14:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2017, 14:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как работать с ASP.NET MVC 5 приложением после развертывания на сервере?
Интересуют ресурсы, где можно почитать про то(желательно с примерами), как работать с ASP.NET MVC 5...

После развертывания нового DHCP-сервера в области аренда адресов недоступна
После развертывания нового DHCP-сервера в области аренда адресов недоступна несмотря на то, что...

Argumentnullexception() пример
argumentnullexception c# Здравствуйте. Объясните пожалуйста, как отрабатывает этот код public...

Возникает argumentnullexception
Простой конвертер. как исправить ошибку?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.