суббота, 12 января 2019 г.

TFS Удаление Workspace

Задача: удалить устаревший Workspace в Team Foundation Server 2015

Помог пост
https://stackoverflow.com/questions/28298771/how-to-remove-tfs-workspace-mapping-for-another-user

Установил программу Team Foundation Sidekicks 2015
http://www.attrice.info/cm/tfs/
 и согласно инструкциям поста удалил устаревший Workspace

суббота, 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)