вторник, 12 ноября 2013 г.

Проблема перехода с MVC3 на MVC 4 : Не вызывается событие ExecuteCore

Проблема
Переводил MVC3 проект на MVC4 (сам переход описан в статье Переход с ASP.NET MVC 3 на MVC4). Столкнулся с проблемой: перестало вызываться событие ExecuteCore (у меня на нем был завязан код инициализации контроллера).

Решение
перешел на событие BeginExecuteCore

На практике сделал поиск и замену во всем проекте 2-х строк
1.
protected override void ExecuteCore()
заменил на
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)

2.
base.ExecuteCore();
заменил на
return base.BeginExecuteCore(callback, state);


Ссылки по теме
помогло это обсуждение
http://stackoverflow.com/questions/9555069/executecore-in-base-class-not-fired-in-mvc-4-beta

понедельник, 11 ноября 2013 г.

Переход с ASP.NET MVC 3 на MVC4 (с VS 2010 на VS2012)

Задача
Перенести проект с MVC 3 на MVC4 (с VS 2010 на VS2012)

Решение
1. Смена студий с Visual Studio 2010 на Visual Studio 2012
Переоткрыл солюшн в новой студии. Студия сама сделала перконвертацию. У меня обошлось без ошибок

2. Смена MVC 3 на MVC 4
Использовал NuGet пакет
Auto Upgrade MVC 3 To MVC 4 version 1.0.1
https://www.nuget.org/packages/UpgradeMvc3ToMvc4

В окне Manage NuGet Packages в поиске ввел "upgrade". Нужный плагин нашелся на первой странице.

3. Правка кода
3.1. Не вызывается событие ExecuteCore
Предыдущие этапы у меня прошли гладко.Но столкнулся с проблемой.
Суть: перестало вызываться событие ExecuteCore
Обращу внимание: у Вас этой проблемы может не возникнуть, если вы не использовали ExecuteCore.
Решение описал в статье:
Проблема перехода с MVC3 на MVC 4 : Не вызывается событие ExecuteCore

3.2. Ошибка компилятора Compiler Error Message: CS1513: } expected
Тут просто компилятор ведет себя по другому.

теперь код вью нужно поправить в соответствии с рекомендациями

Don’t : @{if(check){body}}
Recommended : @if(check){body}

Don’t : @if(@variable)
Recommended : @if(variable)

Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }


обсуждение
http://stackoverflow.com/questions/12809855/issue-migrating-mvc3-application-to-mvc4-compiler-error-message-cs1513-expe

3.3. Ненужная валидация hidden полей
Стала работать валидация hidden полей. она мне не была нужна
Она была мне не нужна, поэтому отключил её.

$(document).ready(function () { 
    //-- отключаю валидацию скрытых полей в форме
    $.validator.setDefaults({ ignore: 'input:hidden' });
});

тут помогло обсуждение
http://stackoverflow.com/questions/10136342/perform-validation-on-hidden-fields


Ссылки по теме
В этом обсуждении подсмотрел ссылку на пакет Auto Upgrade MVC 3 To MVC 4
http://stackoverflow.com/questions/8853330/converting-a-asp-net-mvc-3-project-to-mvc-4


Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4 - этой статьей честно говоря не воспользовался

суббота, 12 октября 2013 г.

Visual Studio 2012 пропал пункт меню "Create Unit Tests...". Восстановление

Проблема:
В Visual studio 2012 пропал пункт меню Create Unit Tests...

Решение

помогло решение отсюда
http://dl.my/2013/enable-create-unit-tests-on-visual-studio-2012/
в этой статье помог раздел Solution 1: The Elegant Way


Пункт меню появился, но он стал в неактивном состоянии
на этом же блоге есть еще одна статья, которая решила и вопрос с неактивностбью пункта меню "Create Unit Tests..."
http://dl.my/2013/create-unit-tests-function-not-available-or-disabled/

UPD
тесты могут не запустаться если у ввас решарпер 7.1.1
нужно обновить до 7.1.3
вот статья
http://devnet.jetbrains.com/thread/442769

См. также
Решение проблемы при тестировании с Entity Framework 6 (EF6)
http://dev-doc.blogspot.com/2013/12/ef6.html


Нехорошее решение
попробовал было установить Unit Test Generator отсюда
http://visualstudiogallery.msdn.microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7

Но он не понравился: генерирует свой тестовый проект и заглушки не заполняет. Кустарщина какая-то в общем.

Но только эта кустарщина помогла в VS 2013.
Смотрите статью:
http://dev-doc.blogspot.com/2014/08/visual-studio-2013-create-unit-tests.html

Ссылки по теме
обсуждение в мсдн коммьюнити
http://social.msdn.microsoft.com/Forums/vstudio/en-US/f76aafa9-3ea8-4ff3-940d-0dcf3bb70273/visual-studio-2012-right-click-create-unit-test-is-gone?forum=vssetup 

воскресенье, 8 сентября 2013 г.

Внезапная остановка сайта и отладочные сообщения PHP dispay_errors

Ситуация
Внезапно работать сайт на виртуальной машине.
Учитывая, что CMS не обновлялась, на саму виртуальную машину я не заходил. Сразу решил что вопрос в аппаратной части, или в настройках линукса. Привлек администратора. Он то и вывел меня на правильное решение. Решение простое до безобразия. но именно из-за того, что я не сразу начал копать в сторону кода, потратил много времени.

Собственно решение: включить отладочные сообщения PHP.
В index.php в корневой директории просто добавились 2 строки

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

Это все. Ошибка сразу направила к нужному файлу и нужной строке.

К слову причина оказалась в поврежденном коде в одном из файлов движка.

пятница, 21 июня 2013 г.

Битрикс Выгрузка заказов Проблема и решение (Управление торговлей для Украины)

Среда

Битрикс 12
1С: УТ Версия конфигурации 1С: 2.3.18.1 Управление торговлей для Украины


Ситуация

Обновили модуль интеграции до версии "1С 8.2 УТ 10.3.16.1 ред 2.9.16"

Пытаемся провести выгрузку заказов. Система считает, что все заказы нужно изменять.
Делает большой файл (порядка 18 Мб и пытается заслать его на сервер).
Выгрузка заканчивается с ошибкой 500.


Как диагностировал

1С-ка диагностирует ошибку так

Выгружено заказов: 1 726 Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка при выполнении файловой операции 'bitrix/admin/1c_exchange.php?type=sale&mode=file&filename=v8_253F_66.zip': Ошибка работы с Интернет: внутренняя ошибка сервера (500) Internal Server Error.
Произошла ошибка: . По причине: Произошла ошибка на стороне сервера. Не получен статус завершения операции

Залез в логи сервера
(на моем хостинге 1gb - они доступны по ftp в папке logs фалй с именем error...<дата>.log)
Ошибка из логов выглядит так
[warn] [client XX.XX.XX.XXX] mod_fcgid: read data timeout in 150 seconds
[Tue Jun 04 16:05:42 2013] [error] [client XX.XX.XX.XXX] Premature end of script headers: 1c_exchange.php

Что пробовал

(в моем случае не помогло, но может помочь в Вашем)

Настройки среды PHP

Если позволяет хостинг, попробуйте увеличить лимиты среды php
max_execution_time = 600
max_input_time = 600
memory_limit = 256M
post_max_size = 256M

Это настройки из файла php.ini


Настройки сервера 

В ходе общения со службой поддержки и гугления вышли на еще одни настройки.
Параметры такие:
FcgidIOTimeout/IPCCommTimeout
Тут я просто попросил службу поддержки сервера увеличить эти параметры.
Ребята сделали, ошибка в логах изменилась, но выгрузка заказаов все равно не произошла

в логах-такое
[Thu Jun 06 18:38:57 2013] [warn] [client XX.XX.XX.XXX] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Thu Jun 06 18:38:57 2013] [error] [client XX.XX.XX.XXX]  Premature end of script headers: 1c_exchange.php
Потом я дал службе поддержки удаленный доступ к 1с, чтобы они сами смогли проинициировать выгрузку. Ребята из поддержки позанимались еще несколько дней и выдали неутешительный вердикт.

В конце концов служба поддержки хостинга дала такой ответ
Увы, в Вашем случае достигается лимит в 300 секунд процессорного времени на один процесс (т.е. процесс подгрузки на протяжении 5 минут создаёт процессорную нагрузку в 100%). Этот лимит у нас, к сожалению, обойти нельзя.
Вам нужно либо как-то "дробить" процесс импорта на части, чтобы он "помещался" в этот лимит, либо же переносить сайт на VDS -- там таких лимитов нет.
На VDS переходить не хотелось.

Я переслал ответ поддержки хостинга в Битрикс - получил ответ, который и помог с выгрузкой заказов


Решение, которое помогло

Тут цитирую ответ службы поддержки Битрикса, после того как все возможные варианты решения со службой поддержки хостинга мы уже испробовали

В модуле обмена с сайтом существует режим принудительной полной выгрузки. Этот режим включается автоматически при любом изменении настройки обмена. В режиме принудительной полной выгрузки изменения заказов 1С игнорируются, происходит полная выгрузка заказов. Режим принудительной полной выгрузки отключается автоматически после первого удачного сеанса обмена. 
Режим принудительной полной выгрузки, при необходимости, может быть отключен вручную. Для этого необходимо через меню «Операции» открыть регистр сведений «Настройки обмена с сайтом с принудительной полной выгрузкой» и удалить в нем записи, относящиеся к используемой настройке обмена.

Действия на будущее

Попросил у Битрикса-1С - разбивать файлы заказов на части, как это делается с товарами

Благодарности

Спасибо большое специалистам службы поддержки хостинга http://1gb.ua за участие в решении вопроса

См.также

Если это решение оказалось не вашим случаем, есть еще одно описание проблемной ситуации при выгрузке и её решение
Решение еще одной проблемы с выгрузкой заказов с ошибкой "Не получен статус заврешения операции"

среда, 5 июня 2013 г.

Нестандартный шаг в JQuery слайдере

Должна помочь статья

http://www.linkexchanger.su/forum/viewtopic.php?f=3&t=1483

и со стековерфлоу статья
http://stackoverflow.com/questions/967372/jquery-slider-how-to-make-step-size-change

пятница, 31 мая 2013 г.

Delphi TDateTimePicker редактирование даты и времени одновременно

Проблемы: стандратный компонент Delphi TDateTimePicker позволяет редактировать или дату или время.
Одновременное редактирование даты и времени в стандартном варианте невозможно.

Погуглил  - выручила статья
http://www.foxbase.ru/delphi/redaktirovanie-daty-i-vremeni-odnovremenno.htm