ASP.net
ASP.NET Error «Padding is invalid and cannot be removed»
1 Июль
После того как установил систему оповещения об ошибках, на e-mail как из рога изобилия посыпались ошибки сайта "Padding is invalid and cannot be removed"
Сайт размещен на Shared WIndows хостинге. Скорее всего хостер использует WebFarm. Дополнительные библиотеки - Telerik Controls
На форуме Телерика нашел сообщение о том, что надо прописать MachineKey в файле web.config.
Например
<system.web> <machineKey validationKey='A06BDCF2F6CF.A.VERY.LONG.44F13E76184945A7C477601' decryptionKey='99079B21C2F3644.A.BIT.SHORTER.BB81C7E9D58378' validation='SHA1'/></system.web>
Не помогло.
Порылся в интернете и нашел вторую меру - прописать запрет к скриптам в файле robots.txt
User-Agent: *
Disallow: /WebResource.axd
Disallow: /ScriptResource.axd
Источники информации:
1. Telerik
2. Fixing “Padding is invalid and cannot be removed” when requesting WebResource.axd
System.OutOfMemoryException
28 Июнь
Неприятный сюрприз я получил с использованием библиотеки UrlRewritingNet.UrlRewriter.dll.
Не знаю, то ли хостинг слабоват, то ли библиотека не без греха, но через 2-3 дня работы сайт падал с ошибкой "System.OutOfMemoryException", хотя сайт еще не был раскручен и имел 5-7 посетителей в сутки. Техподдержка хостинга вникать в мои проблемы не стала, а просто заявила, что проблема у меня.
На данный момент свои сайты я держу на хостинге comfoplace.com
Поскольку такая ошибка возникла впервые, а сейчас у меня 4 сайта на этом хостинге, то я решил разобраться в чем может быть проблема.
Единственное новшество - дружественные ссылки на основе библиотеки UrlRewritingNet.UrlRewriter.dll.
Ради эксперимента решил отказаться от SEO-ссылок, и оставил как есть с передачей параметра.
И, о чудо! Уже более месяца сайт работает без данной ошибки.
Вот такие дела.
Программное создание ключей шифрования ASP.net
7 Февраль
В разделе <machineKey> можно устанавливать специфический для каждого сервера ключ, который должен использоваться для шифрования данных и создания цифровых подписей.
Например
<machineKey validationkey="61EA...B05D" decryptionKey="61EA...37AF" validation="SHA1" />
Значение validationKey может иметь от 40 до 128 символов. Настоятельно рекомендуется использовать ключи максимально возможной длины.
Значение decryptionKey может иметь 16 или 48 символов.
Создавать собственные ключи проверки достоверности и расшифровки не имеет большого смысла. Если же вы все-таки попытаетесь это сделать, они не будут в достаточной мере случайными, что сделает их неустойчивыми к некоторым типам атак. Приемлемым вариантом считается генерирование строго случайного ключа с помощью кода и криптографических классов .NET Framework (System.Security.Cryptography)
Далее показана подпрограмма базового кода, называемая CreateMachineKey(), которая создает случайную серию байтов с помощью криптографически строгого генератора случайных чисел. Метод CreateMachineKey() принимает один параметр, который определяет количество используемых символов. Результатом является шестнадцатеричный формат, который используется в файле machine.config
public static string CreateMachineKey(int length)
{
// создание массива байтов
byte[] random = new byte[length/2];
// создание криптографически строгого генератора случайных чисел
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
// заполнение массива байтов случайными байтами
rng.GetBytes(random);
// создание StringBuilder для хранения результата
// после того как он будет преобразован в шестнадцатеричный формат
System.Text.StringBuilder machineKey = new System.Text.StringBuilder(length);
// Перебор массива случайных байтов и добавление
// каждого значения к StringBuilder
for (int i = 0; i < random.Length; i++)
{
machineKey.Append(String.Format("{0:X2}", random[i]));
}
return machineKey.ToString();
}
Пример использования
txtDecryptionKey.Text=CreateMachineKey(48); txtValidationKey.Text=CreateMachineKey(128);
Далее Вы можете скопировать эту информацию и вставить ее в файл machine.config
Установка кода Liex на сайт ASP.net
29 Январь
В данной статье рассмотрим один из способов установки тематического кода Liex на сайт на платформе ASP.net с поддержкой PHP (Windows-хостинг).
О том, как установить код биржи, подробно написано на самом сайте Liex.ru
Перед добавлением площадки обязательно нужно установить на нее в папку ****** код биржи. Этой папке нужно дать права на запись (777). После добавления внесите изменения в корневой htaccess (см. пункт меню "Тематики")
На windows-хостинге нет понятия право на запись 777, необходимо разрешить запись в эту папку. В большинстве случаев Вы можете сделать это самостоятельно.
Считаем, что Вы установили скрипт, и теперь надо настроить тематики.
Данные строки нужно вставить в корневой htaccess вашего сайта (если в нем есть другие правила mod_rewrite, то тогда НАД ними):
RewriteEngine On RewriteRule ^pages/?$ /b33b9479d2e/ [L] RewriteRule ^stroika/?$ /b33b9479d2e/stroika.php [L] RewriteRule ^stroika/(\d+)/?$ /b33b9479d2e/stroika_$1.php [L] RewriteRule ^stroika/([0-9]+).(php|htm|html)$ /b33b9479d2e/$1.$2 [L] RewriteRule ^in-yaz/?$ /b33b9479d2e/in-yaz.php [L] RewriteRule ^in-yaz/(\d+)/?$ /b33b9479d2e/in-yaz_$1.php [L] RewriteRule ^in-yaz/([0-9]+).(php|htm|html)$ /b33b9479d2e/$1.$2 [L] ...
Естественно, ни о каком htaccess на Windows-хостинге речи быть не может.
В качестве аналога RewriteEngine можно использовать бесплатную библиотеку UrlRewritingNet.
Необходимо скачать с сайта библиотеку UrlRewritingNet.UrlRewriter.dll и закинуть ее в папку BIN Вашего проекта.
Прописать в файле web.config необходимые настройки
<?xml version="1.0"?> <configuration> <configSections> <section name="urlrewritingnet" restartOnExternalChanges="true" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"/> </configSections> <urlrewritingnet configSource="<strong>ExternalRewrite.config</strong>"> </urlrewritingnet> ... <system.web> <httpModules> <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.urlRewriter"/> </httpModules>
Обратите внимание, если библиотека UrlRewritingNet не отработала на Вашем хостинге, тогда добавьте в файл web.config следующие строки
<system.webServer> <modules> <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" /> </modules>
Итак, Вы зарегистрировали библиотеку, теперь необходимо ее настроить. При заданной конфигурации, все настройки будут храниться в файле ExternalRewrite.config
Берем необходимые тематики с сайта Liex и прописываем в конфигурационном файле
Например
<?xml version="1.0"?> <urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage = "Default.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07" > <rewrites> <add name="liexpagesRoot" virtualUrl="^<strong>~/pages/</strong>" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="<strong>~/b33b9479d2e/main.php</strong>" ignoreCase="true" /> <add name="liexCinema" virtualUrl="^~/cinema/([0-9]+).(php|htm|html)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/b33b9479d2e/$1.$2" ignoreCase="true" /> <add name="liexCinemaRoot" virtualUrl="^~/cinema/" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/b33b9479d2e/cinema.php" ignoreCase="true" /> <add name="liexgrafika" virtualUrl="^~/grafika/([0-9]+).(php|htm|html)" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/b33b9479d2e/$1.$2" ignoreCase="true" /> <add name="liexgrafikaRoot" virtualUrl="^~/grafika/" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="~/b33b9479d2e/grafika.php" ignoreCase="true" /> ... </rewrites> </urlrewritingnet>
Обратите внимание на то, что все имена должны быть уникальны.
Каталог статей в данном примере ~\pages.
Вот и все. Теперь все должно работать. Вам необходимо лишь прописать все темы, либо только те, которые Вы принимаете.
Примечание:
Не каждый windows-хостинг поддерживает PHP и файлы .htaccess. А файл .htaccess автоматически записывается в Вашу папку со статьями.
Примеры Windows-хостинга:
Seattlehost - при наличии файла .htaccess в папке выдает ошибку сервера 500
Godaddy - работает без проблем, файл .htaccess игнорируется
Comfoplace - работает без проблем, только при условии, что в настройках хостинга Вы укажите, что поддержка PHP - запустить как расширение ISAPI
Облако тегов на странице ASP.net (wp_cumulus) Flash
27 Январь
Мне лично, да и многим людям понравилось облако тегов на флэше wp_cumulus.
В интернете я нашел всего несколько страниц, которые описывают как сделать такое облако тэгов на ASP.net.
В качестве первоисточника возьмем статью http://dev.net.ua/blogs/eugenekhvedchenya/pages/8134.aspx
(Не уверен, что это первоисточник, но другой статьи под рукой не оказалось)
Итак.
На днях случайно обнаружил очень красивое "живое" облако тегов на флеше:
Само облако тегов написано на флеше, встраивается в страницу с помощью SWFObject, а данные для визуализации берет из набора передаваемых флеш-объекту параметров. Изначально данный плагин предназначался для WordPress, однако мой пытливый ум сразу сказал - "Мне такое надо! Причем на страницах ASP.NET!"
Поразмыслив, я понял что нет ничего невозможного и принялся за работу. Итак, расковыриваем код любой страницы, где есть этот плагин и видим следующее:
text/javascript"> var widget_so9010252 = new SWFObject("tagcloud.swf?r=1510412", "tagcloudflash", "160", "160", "9", "#f8f8f8"); widget_so9010252.addParam("allowScriptAccess", "always"); widget_so9010252.addVariable("tcolor", "0x5391d0"); widget_so9010252.addVariable("tcolor2", "0x333333"); widget_so9010252.addVariable("hicolor", "0x5391d0"); widget_so9010252.addVariable("tspeed", "100"); widget_so9010252.addVariable("distr", "true"); widget_so9010252.addVariable("mode", "tags"); widget_so9010252.addVariable("tagcloud", "....."); widget_so9010252.write("wpcumuluswidgetcontent");Вот и вся магия
Основная проблема была в том, что параметры облака тегов очень плохо документированы, и пришлось немало порыться, прежде чем все заработало так как надо.
Остальное дело техники. Наибольшую трудность вызывает формирование параметра tagcloud, так как туда требуется передать строку с XML особого вида, где все пробелы заменены символом +.
Итак, поехали:
[assembly: WebResource("wpCumulus.swfobject.js", "text/javascript")]
[assembly: WebResource("wpCumulus.tagcloud.swf", "application/x-shockwave-flash")]Флеш-объект и необходимый JS-код встроены в сборку как ресурсы, так что контрол является полностью самодостаточным и не требует для работы никаких дополнительных файлов.
Создаем новый UserControl, который будет уметь рендерить в себе нужный нам JS код:[ToolboxData("")] public class WPCumulus : DataBoundControl { .... protected override void CreateChildControls() { ClearChildViewState(); Controls.Clear(); Page.ClientScript.RegisterClientScriptResource(GetType(), "wpCumulus.swfobject.js"); } protected override void RenderContents(HtmlTextWriter output) { var hiddenContentId = ClientID + ClientIDSeparator + "HiddenContent"; var tagCloud = GenerateTagCloud(); var script = CreateScriptString(tagCloud, hiddenContentId); output.Write(String.Format("", hiddenContentId)); output.Write(""); output.Write(script); output.Write(""); } .... }Как видно из кода, наш класс наследуется от DataBoundControl, что позволяет нам использовать DataBinding для построения списка тегов на основании произвольного источника данных. Для отображения тега в облаке нам необходимы три параметра - Имя Тега, его вес (число ссылок по теме) и ссылка на целевую страницу. За маппинг этих параметров из источника данных отвечают три свойства в классе:
DataTextField - Указывает имя свойства, которое соответствует имени тега.
DataCountField - Указывает имя свойства, которые указывает вес тега.
DataUrlField - Указывает имя свойства, которое соответствует ссылке для данного тега.
Для настройки внешнего вида облака тегов нам доступны следующие параметры:
BackColor - Цвет фона.
TagColor1 - Указывает основной цвет шрифта тега.
TagColor2 - Вспомогательный цвет тега (используется для градиентного перехода при уходе тега на задний план).
HiColor - Цвет тега, когда над ним находится указатель мыши.
TagSpeed - Задает скорость вращения облака (Единицы измерения - попугаи. Оптимальные значения - 20..500 попугаев)
Distr - Булевый параметр отвечает за равномерное распределение тегов по облаку. True - чтобы все было красиво.
MinimumTagSize - Минимальный размер шрифта у тега (для тега с минимальным весом).
MaximumTagSize - Максимальный размер шрифта у тега (для тега с максимальный весом).
Применение контрола:
Сперва опишем наш элемент управления в коде ASPX:<cc1:WPCumulus ID="WPCumulus1" runat="server" DataCountField="Count" DataTextField="Text" DataUrlField="Link" Width="400" Height="400" BackColor="#CCCCCC" HiColor="#66FF33" TagColor1="Red" TagColor2="Blue" Distr="True" />Теперь в файле отделенного кода мы можем привязаться к облаку тегов:WPCumulus1.DataSource = new[]{ new {Text = "Silverlight", Count = 10, Link="/Tags/Silverlight" }, new {Text = "IIS 7", Count = 11, Link="http://iis.net" }, new {Text = "IE 8", Count = 12, Link="/Tags/IE8" }, new {Text = "C#", Count = 13, Link="/Tags/C#" }, new {Text = "Azure", Count = 13, Link="?Tag=Azure" } }; WPCumulus1.DataBind();В результате должно получиться что-то такое:
Приятного использования!
Исходники контрола и демо можно скачать тут: http://flashtagcloud.codeplex.com/
Вместо заключения
Уже после написания контрола нашел в сети аналог для BlogEngine. Но во-первых, их версия заточена под движок и, следовательно, не реюзабельна. Во-вторых написана ногой через голову.
Ограничения Фичи
1) Облако "падает" при большом количестве тегов (Более 400).
2) Не поддерживается кирилица.
Я предлагаю Вам скачать библиотеку wp_cumulus уже с поддержкой кирилицы.

Свежие комментарии