суббота, 29 декабря 2018 г.

ASP.NET MVC Ошибка при загрузке fontawesome-webfont.woff2 ERR_ABORTED 404 (Not Found)


Проблема: 

анализирую загрузку веб страницы (сайт на ASP.NET MVC) через средства разработчика Chrome

наблюдаю ошибку загрузки одного ресурса,

GET https://(сайт)/Content/themes/SbAdmin2/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2?v=4.7.0 net::ERR_ABORTED 404 (Not Found)

причем, проверю по ftp: файл в директории есть

Погуглил:
если вкратце, то ошибка появляется из-за того что настройки веб-сервера не воспринимают расширение .woff2 как статический контент.

Нужно помочь в єтом веб серверу.

Делается через web.config. Нужно добавить несколько строк в разделе system.webServer / staticContent

Добавленные строки выделил

 <system.webServer>
    <staticContent>
      <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
  <remove fileExtension=".woff" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
    </staticContent>



Материалы по теме
HTTP 404 Not Found Error with .woff or .woff2 Font Files
https://hotcakescommerce.zendesk.com/hc/en-us/articles/210926903-HTTP-404-Not-Found-Error-with-woff-or-woff2-Font-Files


How to solve glyphicons-halflings-regular.woff2 Err_Aborted issue in ASP.Net MVC 5
https://stackoverflow.com/questions/46508793/how-to-solve-glyphicons-halflings-regular-woff2-err-aborted-issue-in-asp-net-mvc

суббота, 22 декабря 2018 г.

IIS - парсинг логов и их визуализация

Задача: парсить и представлять в табличном виде логи IIS (определить, кто создает самую большую нагрузку на сайт)

Окружение: IIS 8.5 на Windows Server 2012

Что первое: нагуглил статью
Вертим логи как хотим ? анализ журналов в системах Windows
https://habr.com/company/pc-administrator/blog/351594/


По итогам
1. Установил LogParser 2.2
https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659

2. Установил Log Parser Studio
https://gallery.technet.microsoft.com/Log-Parser-Studio-cd458765


Дальше оказалось не так уж сложно, если знакомы с SQL-запросами
Часть запросов предустановлены в Log Parser Studio

Также помогла статья
поля IIS логов
https://stackify.com/how-to-interpret-iis-logs/


По итогу определил самые нагружающие сайт IP-адреса (неудивительно что ими оказались IP-адреса гугл0бота) и проанализировал обращения к сайту

Помогли такие заготовки запросов

ip-адреса по количеству запросов
select c-ip, cs(User-Agent),count(c-ip) as requestcount from '[LOGFILEPATH]'
where cs-uri-stem like '%/%' 

group by c-ip, cs(User-Agent) order by count(c-ip) desc

запросы от определенных IP-адресов
select * from '[LOGFILEPATH]'
where c-ip like '66.249.64.%' and date ='2018-12-22' and time > '10:15:00' order by date, time



См. также
Log Parser Studio and IIS Advanced Logging
https://blogs.technet.microsoft.com/karywa/2013/06/28/log-parser-studio-and-iis-advanced-logging/

получение информации по IP адресу
https://2ip.ru/whois/
https://ru.infobyip.com/

четверг, 20 декабря 2018 г.

Ошибки "500 - Internal server error" и "Service Unavailable" с Url Rewrite (переопределение URL) на IIS 8.5 (Windows Server 2012)

Окружение: Windows Server 2012, IIS 8.5

Ситуация: переношу на сервер веб-приложение на технологии ASP.NET MVC

Ошибка 1:
500 - Internal server error


начинаю разбираться. оказывается в web.config была секция переопределния url

<rewrite>
...
</rewrite>

Закомментировал эту секцию, сайт заработал.

статьи по теме
Url Rewrite in IIS 7.5 causes Internal server error
https://stackoverflow.com/questions/3332923/url-rewrite-in-iis-7-5-causes-internal-server-error

URL Rewriter causing a "500 Internal Server Error"
https://forums.asp.net/t/1669041.aspx?URL+Rewriter+causing+a+500+Internal+Server+Error+


Ок. Но ведь нужно настроить переопределение URL
в статьях нашел подсказку: нужно установить Модуль перопределение Url-адресов

Что советуют:
устанавливать по ссылке
https://www.iis.net/downloads/microsoft/url-rewrite
или через Web Platform Installer

проделал оба варианта:

Получаю

Ошибка 2
Service Unavailable

Начинаю разбираться

Сначала проверил - пул приложений остановлен. Запускаю его, но он все равно останавливается после первого запроса (значит какие-то ошибки мешают ему запуститься нормально).

Иду дальше
Управление компьютером
  Ветка в дереве: Служебные проргаммы / Просмотр событий / Журналы Windows / Приложение

Вижу такую ошибку
Не удалось загрузить модуль библиотеки DLL C:\Windows\system32\inetsrv\rewrite.dll.  Данные представляют собой код ошибки.

гуглю

Troubleshooting IIS AppPool crashes (status 503) after Windows 10 Anniversary Update
https://orcharddojo.net/blog/troubleshooting-iis-apppool-crashes-status-503-after-windows-10-anniversary-update

Windows 8.1 / Windows 10 breaks my ASP.NET / IIS : “Service unavailable”
https://stackoverflow.com/questions/18714709/windows-8-1-windows-10-breaks-my-asp-net-iis-service-unavailable/32186719#32186719

IIS UrlRewrite is not working for IIS 8
https://stackoverflow.com/questions/14607390/iis-urlrewrite-is-not-working-for-iis-8

На самом деле варианты переустановки, восстановления (через окно удаления программ), перезапуск IIS, перезапуск веб-приложения, переоткрытие окна IIS, как советовали в этих статьях мне не помогли

Что же помогло? помог странный вариант: установка более старой версии модуля url rewrite (для iis 7) по ссылке

https://www.microsoft.com/ru-ru/download/details.aspx?id=7435






пятница, 9 ноября 2018 г.

EF.Core, Db First Подход. Scaffolding Lazy Loading

Ситуация. Делаю проект на .Net Core + Entity Framework Core
Использую DB First подход.

Хочу использовать Lazy Loading (По привычке работы с EF 6)

Проблема: стандартный скаффлодинг (через Scaffold-DbContext) не добавляет признака virtual у моделей-таблиц БД что необходимо для Lazy Loading-а.

При попытке запуска получаю ошибку

InvalidOperationException: Navigation property '(PropertyName)' on entity type '(EntityName)' is not virtual. UseLazyLoadingProxies requires all entity types to be public, unsealed, have virtual navigation properties, and have a public or protected constructor.

Как решил вопрос
перешел на скаффолдинг с использованием EF Core Power Tools

Установка:
Visual Studio -> меню Tools/Extensions And Updates

ищем EF Core Power Tools
устанавливаем

Далее скаффолдинг производим через конекстное меню проекта
пункт
EF Core Power Tools/Reverse Engineer

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

public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }


Далее, самый важный момент
собственно добавление поддержки Lazy Loading

при скаффолдинге через EF Core Power Tools нужно включить опцию
Customize code using Handlebars Templates



После этого в папке проекта появятся папкf CodeTemplates с подпапками


Чтобы добавить поддержку Lazy Loading в сгенерированный код, измените шаблон Properties.hbs в CSharpEntityType / Partials следующим образом:


{{spaces 8}}public virtual ICollection<{{nav-property-type}}> {{nav-property-name}} { get; set; }
{{spaces 8}}public virtual {{nav-property-type}} {{nav-property-name}} { get; set; }

УРА!
После следующей генерации таблиц навигационные свойства будут уже виртуальными

см. также
EF.Core, Db First Подход. Ошибка скаффолдинга (Scaffold-DbContext) Build Failure

что помогло
статья
https://stackoverflow.com/questions/50827976/scaffold-dbcontext-not-generating-virtual-navigation-properties-ef-core-2-1

и статья
https://github.com/ErikEJ/EFCorePowerTools/wiki/Reverse-Engineering

понедельник, 5 ноября 2018 г.

EF.Core, Db First Подход. Ошибка скаффолдинга (Scaffold-DbContext) Build Failure

Ситуация:

Работаю с .Net.Core проектом использую EF.Core с ви-ашкые подходом.
Сгенерировал контект и базу данных с помощью команды

Scaffold-DbContext "Server=(server);Database=(dbname);User ID=(user);Password=(password)" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Первая генерация прошла хорошо.

Далее:
написал немного кода, добавил в солюшн AspNet.Core приложение.
провел изменение в базе данных и хочу перегенерировать модели БД.
Т.е. запустить Scaffold-DbContext во второй раз.

Чтобы не было пересечений - удаляю преварительно классы контекста БД и старые модели.

и, при запуске Scaffold-DbContext получаю ошибку

Build failed

Начал разбираться: нашел 2 варианта:

Вариант решения 1.
Обходной путь - подходит для небольших проектов


суть:
Выполняем 2 шага перед повторным скаффолдингом

Шаг 1. "Чистый" проект под модели (нужно сделеть 1 раз)
если в вашем солюшене несколько проектов, то оставьте модели базы данных в одном проекте и путсь в этом проекте не будет больше кода, который ссылается на эти модели.
Т.е. чтобы удаление моделей и контекста базы данных не приводило к ошибке компиляции проекта.

Шаг 2. Выгрузка других проектов перед скаффолдингом
Щелкаете правой кнопкой мыши на других проектах решения и выберите Unload Project

теперь можете стереть классы моделей и выполнить скаффолдинг

Только после скаффолдинга нужно будет вгрузить обатно выгруженные на шаге 2 проекты.

что помогло
статья
https://github.com/aspnet/EntityFrameworkCore/issues/9515

Этот вариант подходит если у Вас в солюшене немного проектов и обновление моделей происходит не очень часто.

Вариант решения 2.
Используем EF Core Power Tools

Суть:
используем инструмент EF Core Core Power Tools в Visual Studio

Установка:
Visual Studio -> меню Tools/Extensions And Updates

ищем EF Core Power Tools
устанавливаем

Далее скаффолдинг производим через конекстное меню проекта
пункт
EF Core Power Tools/Reverse Engineer

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

public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }


Примечание
Дальше я столкнулся с проблемой Lazy Loading, её регение описал в отдельной статье
EF.Core, Db First Подход. Scaffolding Lazy Loading


что помогло
статья
https://stackoverflow.com/questions/50827976/scaffold-dbcontext-not-generating-virtual-navigation-properties-ef-core-2-1

среда, 24 октября 2018 г.

HTTP Error 502.5 - Process Failure - Ошибка при Публикации ASP.NET Core приложения на Azure

Окужение

Visual Studio 2017, dot net core 2.1

Ситуация 

публикую простое ASP.NET Core приложение на Azure
Получаю
HTTP Error 502.5 - Process Failure 


Поиск причины ошибки

В данной задаче не столько было сложно устранить саму ошибку, сколько выяснить её причину. 
Как я действовал

Azure/панель управления приложением/

App Service
Diagnose and solve problems

раскрыть Solutions To Common Problems
Check out the application event logs ...

у меня ошибка была:
Application 'MACHINE/WEBROOT/APPHOST/(Application-name)' with physical root 'D:\home\site\wwwroot\' failed to start process with commandline 'D:\home\site\wwwroot\(Appliction-name.exe) ', ErrorCode = '0x80004005 : 80008096.

смотрю

https://stackoverflow.com/questions/42713848/net-core-app-unable-to-start-in-iis-due-to-errorcode-0x80004005-80008083

советуют через консоль идти

Azure/панель управления приложением/
Development Tools/Console

Решение в моем случае


в конце концов мне помогло изменение настроек публикации в Visual Studio

Форма настроек публикации
Вкладка Settings
поле Target Runtime установил в значение Portable
(поле Deployment Mode у меня было в значении Framework-Dependent)

вторник, 16 октября 2018 г.

VS Code: как остановить выполнение команды ng serve

Окружение
Visual Studio Code

Ситуация
Запустил команду в терминале
ng serve -o

(приложение запускается в браузере и мониторит изменения)


Вопрос
Как остановить выполнение команды

Ответ
Ctrl+C

если не помогает то
Ctrl+C , Ctrl+C
(два раза жмем Ctrl+C)


помог ответ отсюда





четверг, 16 августа 2018 г.

PostMan не проходят запросы к localhost (Could not get any response)

Проблема

В программе Postman (https://www.getpostman.com/) не удается получить данные с localhost

Решение

Settings/General
выключить 'SSL cerificate verification'


Как понял

Включил консоль
view/ShowPostmanConsole

Материалы по теме

Помогли заметки
Call to localhost:8000 "Could not get any response"
https://github.com/postmanlabs/postman-app-support/issues/2214

Self-signed certificates for localhost not working with Postman
https://github.com/postmanlabs/postman-app-support/issues/3136

вторник, 15 мая 2018 г.

Ошибка подключения к удаленному рабочему столу "CredSSP"

Проблема

При попытке подключения к удаленному рабочему столу на одном из серверов получил такую ошибку

Подключение к удаленному рабочему столу
Произошла ошибка при проверке подлинности.
Указанная функция не поддерживается
Причиной ошибки может быть исправление шифрования CredSSP


Решение

Причина и решеиние достаточно подробно описаны в статье
https://habr.com/company/vps_house/blog/358190/

Помогла служба поддержки хостинга

суббота, 12 мая 2018 г.

Генерация файла sitemap.xml на C# для ASP.NET проекта

Задача

Сгенерировать файл sitemap.xml на C# для ASP.NET проекта

Файлов в проекте нет - контент генерируется динамически

Решение


помог проект https://github.com/aseemgautam/google-sitemap

нашел его в ветке https://stackoverflow.com/questions/13449103/how-to-create-xml-sitemap-programmatically-in-c-sharp


Проект достаточно простой. Я просто интегрировал 3 файла в свой проект (немного переписав неймспейсы)

Идея: создать список объектов SitemapLocation и заслать их в объект SiteMap.
Ниже - 2 примера использования

                  public static string GetSitemap(
            List<SitemapLocation> locations
            )
        {
            Sitemap sitemap = new Sitemap();
            sitemap.AddRange(locations);            
            return sitemap.WriteSitemapToString();
        }

        public static void WriteSitemapToFile(
            List<SitemapLocation> locations,
            string fileName
        )
        {
            Sitemap sitemap = new Sitemap();
            sitemap.AddRange(locations);
            sitemap.WriteSitemapToFile(fileName);            
        }

Сам список локейшенов создается примерно так

            var res = new List<SitemapLocation>();

            res.Add(new SitemapLocation
            {
                ChangeFrequency = SitemapLocation.eChangeFrequency.weekly,
                Priority = 0.5,
                Url = UrlPrefix + "/news",
            });


Для понимания формата файла хорошо помогла статья
XML-формат файла Sitemap

см. также


XML-формат файла Sitemap

Что такое Sitemaps?

How to create XML sitemap programmatically in c#
https://stackoverflow.com/questions/13449103/how-to-create-xml-sitemap-programmatically-in-c-sharp

Как создать карту сайта? Создаем sitemap для Google и Яндекс
https://seoprofy.ua/blog/optimizaciya-sajtov/kak-sozdat-kartu-sajta

Карта сайта (файл Sitemap) от А до Я
http://pr-cy.ru/news/p/5433

Правильный файл sitemap.xml или как создать карту сайта своими руками | Карта сайта для Joomla + VirtueMart с помощью компонента Xmap




понедельник, 30 апреля 2018 г.

Трубка GrandStream DP 720 не перезванивает по списку номеров: пишет User Unknown (Базовая станция Grandstream DP 750)

Ситуация

внедряю IP телефонию на одном из проектов. Базовая станция Grandstream DP 750, трубки Grandstream DP 720.

Проблема

Трубка Grandstream DP 720 не перенабирает номер из списка номеров (Принятых, Пропущенных, Набранных и т.д.)
При попытке набрать номер пишет User Unknown
Очень неудобно, так как менеджерам приходилось переписывать номер на листик и вносить его на клавиатуре трубки.

Решение

Помогла служба поддержки провайдера IP-телефонии Phonet.

В общем решение заключается в том, чтобы внести изменения в настройки конфигрурации базовой станции.

Первая задача: определить ip-адрес базовой станции.

Я использовал программу Advanced IP-Scanner
Подробнее по определению IP-адреса описано в статье.

Смотрите IP-адрес устройства, у которого в графе производитель будет стоять "Grandstream Networks Inc."


Далее заходим в Веб-интерфейс базовой станции.

У меня http://192.168.0.108
(у Вас, скорее всего, последняя цифра будет оличаться)

Стандартный логин/пароль: admin/admin

Далее проверим на каком профиле работает трубка
Меню: DECT/SIP Account Settings



Видим, что у меня трубка работает через первый профиль "Profile 1"
Теперь заходим в профиль: Profiles/Profile 1/Call settings
(не забываем, что у меня профиль первый, у вас - может отличаться)
и ищем поле Dial Plan (его-то нам и нужно будет поменять)




В поле Dial Plan старое значение заменяем на такое

{ x+ | *x+ | \ +x+ | *xx*x+ | x*x+x }


Внимание! тут есть тонкий момент: когда Вы заменяете строку в одном из фрагметнов есть исимвол "\". Он важен, но, видимо, он воспринимается системой как служебный символ и после сохранения значения он исчезает (система его "проглатывает").

После сохранения вы увидите в поле Dial Plan такое значение (уже без \)
{ x+ | *x+ |  +x+ | *xx*x+ | x*x+x }

И если Вы захотите скопипасить его в другой профиль - оно не сработает: сделает вид что сохранило, а на самом деле не сохранит. Поэтому обязательно используйте вариант строки с "\"









Как найти устройство (IP-адрес) в локальной сети

Вопрос

Как найти IP-адрес устройства в локальной сети

Решение

Скачайте и запустите Advanced IP-Scanner

https://www.advanced-ip-scanner.com/ru/

работает без установки

пятница, 2 марта 2018 г.

Outlook 2016 Moving a data file to another disk

Situation

On a laptop with the first small SSD drive, I want to move the outlook data file to another large disk (to free up more space on the SSD)


Task

Transfer the Outlook 2016 data file to another drive (in general, to another location)


What did not work?

a rough move of the file and the restart of Outlook did not help. Outlook 2016 recreates its file in the old location.


What worked

solution for Windows 10


Creating a symbolic link


Steps:


1. Close Outlook

2. Move the .ost data file (it is usually stored C: \ Users \ (user) \ AppData \ Local \ Microsoft \ Outlook \).

3. Make a symbolic link



mklink "C: \ Users \ (user) \ AppData \ Local \ Microsoft \ Outlook \ (filename) .ost" "D: \ Outlook \ (filename) .ost"



Do not forget to replace

(user) and (filename) to real values



Related links

Moving the ost-file or pst-file of an Outlook.com or IMAP account
(this is about the creation of symbolic links)
https://www.howto-outlook.com/howto/movingostpstoutlookcomimap.htm




Move the ost-file to another disk or folder location
https://www.msoutlook.info/question/463
here it is said that for the Outlook 2016 the file transfer method does not work

Google Cloud Translation API C# code sample

A simple example of implementing the Google Cloud Translation API for C #


Google.Cloud.Translation.V2 library must be installed into the project through the NuGet


public class TranslateServiceGoogle
    {
        public int MaxTextLenght => 4999;

        private readonly string apiKey;

        private TranslationClient _client;
        private TranslationClient Client => _client ?? (_client = TranslationClient.CreateFromApiKey(apiKey));

        public TranslateServiceGoogle(string apiKey)
        {
            this.apiKey = apiKey;
        }        

        public string TranslateText(
            string text,
            string languageFrom,
            string languageTo
            )
        {
            if (string.IsNullOrWhiteSpace(text)) return "";

            CheckTranslatebleText(text);                      

            var res = Client.TranslateText(text, languageTo, languageFrom);

            return res.TranslatedText;
        }

        public string TranslateHtml(
            string text,
            string languageFrom,
            string languageTo
        )
        {
            if (string.IsNullOrWhiteSpace(text))
                return "";

            CheckTranslatebleText(text);
            
            var response = Client.TranslateHtml(text, languageTo, languageFrom);

            return response.TranslatedText;
        }

        public void CheckTranslatebleText(string text)
        {
            if (text.Length > MaxTextLenght)
            {
                throw new ArgumentOutOfRangeException($"Text length exceeds ({text.Length} symbols)!");
            }
        }
    }


суббота, 24 февраля 2018 г.

Google Cloud Translation API пример кода на C#

Простой пример реализации сервиса перводов Google Cloud Translation API на C#

Для работы коду нужно устанвоить в проект через NuGet библиотеку Google.Cloud.Translation.V2


public class TranslateServiceGoogle
    {
        public int MaxTextLenght => 4999;

        private readonly string apiKey;

        private TranslationClient _client;
        private TranslationClient Client => _client ?? (_client = TranslationClient.CreateFromApiKey(apiKey));

        public TranslateServiceGoogle(string apiKey)
        {
            this.apiKey = apiKey;
        }        

        public string TranslateText(
            string text,
            string languageFrom,
            string languageTo
            )
        {
            if (string.IsNullOrWhiteSpace(text)) return "";

            CheckTranslatebleText(text);                      

            var res = Client.TranslateText(text, languageTo, languageFrom);

            return res.TranslatedText;
        }

        public string TranslateHtml(
            string text,
            string languageFrom,
            string languageTo
        )
        {
            if (string.IsNullOrWhiteSpace(text))
                return "";

            CheckTranslatebleText(text);
            
            var response = Client.TranslateHtml(text, languageTo, languageFrom);

            return response.TranslatedText;
        }

        public void CheckTranslatebleText(string text)
        {
            if (text.Length > MaxTextLenght)
            {
                throw new ArgumentOutOfRangeException($"Недопустимый размер текста ({text.Length} символов) в блоке!");
            }
        }
    }


см. также
Сравнение сервисов облачных переводов Microsoft Azure Translator Text API и Google Cloud Translation API

четверг, 15 февраля 2018 г.

Connection to MS SQL Server slows down via WiFi (TP-Link Archer C2, AC 750 router)

Situation

I bought and installed a new TP-Link Archer C2, AC 750 router

Found strange slows down when connecting to a remote MS SQL Server database

When connecting by cable, the connection speed with the database is almost instantaneous (up to 1 second)

Through the wi-fi connection to the base took 35 seconds (although the overall speed of the wi-fay is almost the same as the cable)

With the old D-link dir 300 router, there were no such problems. The laptop did not change. The provider did not change.

I use EMS SQL Manager for SQL for database coneection
https://www.sqlmanager.net/en/products/mssql/manager


What did not help


Switched to different 2.4 and 5 MHz bands
Played with subtle settings WiFi (channel, channel width, Package, WPS) - all useless


What helped


It turned out that it was in the settings for WiFi authorization

in the web interface of the router (usually access through http://192.168.0.1/)
section
Wireless Security

defaults:

Authentication type: WPA2-PSK
Encryption: AES

It was necessary to change the encryption to TKIP

Note: to change the encryption from AES to TKIP it was necessary to disable WPS mode for one of the channels (this is also done via the web interface of the router.) The section is called "WPS")

I want to note the support service TP-Link.
Although the modem is home-use, but I was not left alone with the problem. Manager Vyacheslav Didenko contacted me and we spent more than an hour dealing with the situation. Good job!

Соединение с MS SQL Server тормозит по WiFi (роутер TP-Link Archer C2, AC 750)

Ситуация

Купил и установил дома новый роутер TP-Link Archer C2, AC 750

Обнаружил странные торможения при подключении к удаленной базе данных MS SQL Server

При соединении по кабелю скорость соединения с базой данных практически моментальная (до 1-ой секунды)

Через вай-фай соединение с базой заняло 35 сек (хотя общая скорость по вай-фаю почти такая же как и по кабелю)

Со старым роутером d-link dir 300 таких проблем не было. Ноутбук не менял. Провайдера не менял

С БД коннекчусь через EMS SQL Manager for SQL Server
https://www.sqlmanager.net/en/products/mssql/manager 


Что НЕ помогло


Переключался на разные диапазоны 2,4 и 5 Мгц
Игрался с тонкими настройками WiFi (канал, ширина канала, Пакет, WPS) - все без толку


Что помогло


Оказывается дело было в настройках авторизации WiFi

в веб-интерфейсе роутера (обычно доступ через http://192.168.0.1/)
раздел
Защита беспроводного режима

по умолчанию стояло так

Тип аутентификации: WPA2-PSK
Шифрование: AES

Нужно было изменить шифрование на TKIP

Примечание: чтобы сменить шифрование с AES на TKIP пришлось для одного из каналов отключить режим WPS (это тоже через веб-интерфейс роутера делается. Раздел так и называется "WPS")

Отдельно хочу отметить службу поддержки TP-Link.
Хоть модем и домашний, но меня не бросили один на один с проблемой. Менеджер Вячеслав Диденко связался со сной и мы больше часа разбирались с ситуацией. Зачет однозначно!