Показаны сообщения с ярлыком aspnet. Показать все сообщения
Показаны сообщения с ярлыком aspnet. Показать все сообщения

четверг, 29 октября 2009 г.

Как отправлять почту через Google Mail с сайта ASP.NET

Грабли, которые подстерегают человека, которому надо отправить почту через почтовый домен, хостящийся на google apps из .net-сайта. Грабли описаны на примере встроенных в фреймворк классов из пространства System.Net.Mail.

1) Надо обязательно использовать TLS/SSL. В web.config это выглядит так:

<system.net>
    <mailSettings>
        <smtp from=from_person@domain.com deliveryMethod="network">
            <network host="smtp.gmail.com." port="587" userName=from_person@domain.com password="PASSWORD"/>
        </smtp>
    </mailSettings>
</system.net>

2) Кроме того что в конфиге надо правильный порт сказать, в коде надо проставить свойство EnableSsl у SmtpClient (не знаю, почему это не вынесено в <mailSettings>

private static void internalSend(SmtpClient smtp, string email, MailMessage mm)
{

…
smtp.EnableSsl = true;
smtp.Send(mm);

}

3) На хостинговом сервере может не пройти проверка сертификата SMTP сервера. Я решил этот вопрос радикально – отключил проверку:

public static bool ValidateServerCertificate(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}

private static SmtpClient getSmtpClient()
{
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

    return new SmtpClient();
}

4) Сам почтовый аккакунт, из-под которого отправляется почта, должен быть активирован в гугле. Это значит, что

  • запись для аккаунта создана в контрольной панели google mail
  • под самим аккакнтом на gmail заходили хоть раз
  • в свойствах аккаунта стоит разрешение подключаться по POP3/SMTP

И даже после этого у вас может получиться отправлять почту совсем не сразу. У меня например гугль начал отсылать письма где-то через день после того как я под аккаунтом залогинился в gmail. Наверное, что-то обсчитывал :-)

воскресенье, 18 октября 2009 г.

.Net 3 - Сила методов расширения

Методы расширения (Extension Methods) это простой такой трюк компилятора, который позволяет программисту добавлять свои собственные методы к уже существующим классам.
Естесственно, чтобы не нарушить защиту класса, методам расширения недоступны “кишки” класса, к которому они пристраиваются. Метод расширение обязан пользоваться существующим публичным контрактом.
Фактически, это такой способ подстроить синтаксис уже существующей библиотеки/фреймворка “под себя”, уменьшив количество кода, которое нужно написать для реализации требуемой функциональности (любители Nemerle меня поймут :-)
Передо мной недавно встала следующая задача: во множестве пользовательских контролов ASP.NET приложения нужно было анализировать дерево контролов страницы и выцепить из него самый первый контрол, который реализовал определенный интерфейс.
Метод FindControl для этого не подходил – я не имел возможности задавать имя контрола. В результате были написаны пара методов-раширений, которые добавляли требуемую функциональность


пятница, 25 сентября 2009 г.

понедельник, 14 сентября 2009 г.

Tip: Как запустить ASP.NET Development Server из командной строки

Все очень просто:

сделал себе такой вот .CMD файл для запуска примеров ASP.NET Charts

start /B C:\windows\Microsoft.NET\Framework\v2.0.50727\webdev.webserver.exe /port:12543 /path:"C:\samples\dotNet\MSChart\WebSamples" /vpath:"/"


Понятно, что точный путь к webdev.webserver.exe зависит от вашей системы


via this

вторник, 1 июля 2008 г.

Как реюзать master pages и user controls между веб-проектами

Всегда думал, что нереально использовать в ASP.NETовском проекте UserControl, созданный и "живущий" в другом проекте.

Однако я был неправ - вот здесь -

http://blogs.msdn.com/webdevtools/archive/2006/08/15/701642.aspx

- описывается, как это сделать без особенных даже сложностей.

Основная идея - создается корневой веб-проект, для которого на уровне IIS заводится web application, а под-проекты не имеют своего IIS-приложения и живут исключительно как виртуальные папки.

Есть только пара ограничений - вы не сможете использовать Dev Web Server для отладки (нужно будет конфигурить IIS) и это должны быть проекты типа Web Application Project (не вебсайты).

ну и по разным app pool-ам подпроекты в таком виде уже не раскидаешь....


А так - способ, который явно работает.

воскресенье, 23 марта 2008 г.

FormsAuthentication - мелочь, а неприятно

Искал я искал, почему у меня в ASP.NET при использовании forms authentication не работает "remember me" - а оказывается, по умолчанию этот самый permanent login ни фига не перманент, а 30 минут. Чтобы это исправить, нужно было поменять значение authentication/forms/@timeout в web.config-е


<system.web>
...

<authentication mode="Forms">
<forms timeout="50000000">
</authentication>

суббота, 16 февраля 2008 г.

GWT + ASP.NET + JSON + MVC и все-все-все. Часть первая, вступительная

Часть первая, идея

Вот так сидишь, пьешь чай в третьем часу ночи, и неожиданно понимаешь, что тебе хочется рассказать всему миру, как можно сделать хорошее, добротное GWT-приложение, да еще и по-честному интегрированное с Microsoft-овским стеком веб-технологий. Что ж, начнем.

Тема это довольно большая, увесистая, поэтому рассказывать будем по частям. Начнем, как водится, с постановки задачи.

Постановка задачи

Задачу мы поставим не очень сложную, но вместе с тем не совсем тривиальную – написать компонент для просмотра и ограниченного редактирования списка контактов, на манер skype. Сам компонент должен быть встроен в приложение на ASP.NET.

Список контактов выглядит в скайпе вот как:

Как видите, это список, каждый из элементов которого снабжен индикатором состояния, псевдонимом и подписью.

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

Мы, в нашем редакторе контактов, повторим идею «разворачивания» выбранного элемента и немного модифицируем набор операций – мы дадим возможность скрыть некоторые из контактов с возможностью их показать потом.

Требования

Итак, сформулируем требования к нашему Контакт-листу:

1. Системные требования

1.1. Редактор контактов должен быть выполнен с использованием Google Web Toolkit (GWT)

1.2. Веб-приложение должно быть написано на C# и «бегать» под управлением Microsoft ASP.NET 2.0

1.3. GWT-шный модуль с ASP.NET-овской частью будут взаимодействовать по протоколу JSON-RPC

1.4. GWT часть должна без проблем запускаться как изнутри ASP.NET, так и в hosted mode, для того, чтобы не иметь проблем с отладкой.

2. Требования к интерфейсу контакт-листа

2.1. Контакт лист должен отображать список контактов

2.2. Контакт лист должен показывть кол-во отображаемых контактов

2.3. Контакт лист должен позволять выбирать одного из показанных контактов

2.4. Выбранный контакт отображается в развернутом виде, остальные контакты – в свернутом.

2.5. «Свернутый» контакт показывает

2.5.1. Состояние контакта – онлайн или офлайн в виде иконки

2.5.2. Псевдоним (nickname) контакта

2.6. «Развернутый» контакт показывает

2.6.1. Псевдоним контакта

2.6.2. Состояние контакта – онлайн или офлайн в виде разного цвета его псевдоним – зеленый (онлайн) или серый (офлайн)

2.6.3. Кнопку «скрыть»

2.7. «Развернутый» контакт можно скрыть по нажатию соответстующей кнопки и тогда он пропадает из списка контактов.

2.8. Для того, чтобы показать список контактов, на странице должна быть кнопка «показать все контакты»

Для разнообразия, кнопку «показать все контакты» мы поместим за пределам GWT-модуля, чтобы продемонстрировать возможности модуля по интеграции с «внешим миром»

Прототип контакт-листа

Потратив 5 минут с Microsoft Visio, делаем вот такой прототип нашего приложения:

Когда мы кликаем на имя в списке контактов, информация о контакте разворачивается, показывая детали. Контакт можно временно скрыть из списка (в возможностью вернуть обратно), кликнув на соответствующую ссылку . Картинки для проекта мы возьмем… ну сами догадайтесь, где J

Пока все просто и ясно, huh? Теперь нам нужно сделать заготовку для нашего проекта.

Структура приложения

Если грубыми мазками – то приложение будет выглядеть вот так:

На ASP.NET-овском сайте расположена страница default.aspx, в которую встроен модуль GWT ContactListModule. Модуль общается с веб-приложением через JSON-RPC интерфейс, опубликованный на странице cl_service.ashx.

Вам понадобится

Чтобы собрать приложение своими руками, вам понадобятся клей,ножницы,бумага следующие инструменты:

  1. Microsoft Visual Studio 2005 (можно Express Edition - http://www.microsoft.com/express/vwd/)
  2. Eclipse IDE - http://www.eclipse.org/downloads/
  3. Google Web Toolkit - http://code.google.com/webtoolkit/gettingstarted.html

Первые шаги

Итак, перво-наперво создадим структуру приложения


mkdir ContactListModule
cd ContactListModule
\projectcreator -eclipse ContactListModule
\applicationCreator -eclipse ContactList org.acme.client.ContactListModule

  • При помощи Visual Studio 2005 создаем пустой веб-сайт. Назовем его «ContactListSite»
  • Создаем на веб-сайте пустую страницу default.aspx – место, где затем разместится наш GWT модуль
  • Подключаем какую-нибудь JSON-RPC библиотеку. Я для примера буду использовать JayRock JSON-RPC. Взять ее можно здесь: http://jayrock.berlios.de/. Вам нужно добавить к сайту ссылки на сборки Jayrock.dll и Jayrock.JSON.dll, как сказано в инструкции: http://jayrock.berlios.de/#quick-start. Также создайте заготовку для JSON-RPC service и назовите ее cl_service.ashx. Пусть этот сервис лежит в корне сайта, рядом с default.aspx

Я думаю, со всеми этими операциями вы справитесь без труда. Но на всякий случай я сделал шаблон проекта, который вы можете скачать по ссылке ниже.

На этом вступительная часть закончена. В следующей серии - дизайним GWT модуль в духе Model-View-Controller.

понедельник, 14 января 2008 г.

GWT + ASP.NET Ajax = ?

Провозился сегодня какое-то время, пытаясь встроить модуль, написанный на Google Web Toolkit внутрь приложения, написанного на ASP.NET 2.0 + Ajax Extensions. В мозилле работает - в MSIE падает со словами "operation aborted". Проблемы я так понимаю с инициализацией DOM-дерева - там какие-то заморочки с таймингом.

Оказалось - виноват GWT. К счастью, баг поправили буквально в декабре выкатили GWT 1.4.61, где все уже работает нормально. Зато теперь я могу с уверенностью утверждать, что оно совместимо с ASPNET-ом. Правда, на серверной стороне для транспорта пришлось прикрутить JayRock JSON-RPC, а на стороне GWT вообще писать json-овские реквесты руками. Но тем не менее - работает, и работает весьма.

среда, 14 ноября 2007 г.

MVC Framework для ASP.NET - 1я демка

Вот собственно и первое описание грядущего MVC Framework. Выглядит очень похоже на MonoRail. Будем ждать первых бета-версий



http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx

понедельник, 15 октября 2007 г.

MVC Framework для ASP.NET

Чтобы не забылось - рассказ на час про Model-View-Controller Framework, который делают для ASP.NET и VS. Обещают в этом году первую бету.

http://www.hanselman.com/blog/ScottGuMVCPresentationAndScottHaScreencastFromALTNETConference.aspx

среда, 26 сентября 2007 г.

Dumping ASP.NET Session State

Нашел интересную статью про то, как в WinDbg проанализировать содержимое сесси для приложений ASP.NET. Это можно делать как в режиме отладки, так и в режиме анализа дампа процесса.

Читаем статью на MSDN Blogs:

http://blogs.msdn.com/tess/archive/2007/09/18/debugging-script-dumping-out-asp-net-session-contents.aspx

PS: Вообще советую читать блог Tess всем, кто так или иначе связан с отладкой приложений ASP.NET. Она дает очень интересные советы.

вторник, 4 сентября 2007 г.

История одной битвы: Unable to attach to process"

Однажды, после долгого перерыва, сел я отлаживать проиложение, написанное на asp.net 1.1 при помощи Visual Studio 2003...
И огреб вот такое сообщение при попытке натравить дебаррер на сайт:




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



И понеслось... находил я в гугле самые разные советы, в том числе и очень экзотические и очень подробныe...

Короче, потратил минут 40, а потом выяснилось (внимание, правильный ответ), что в настройках приложения в IIS для этих сайтов с качестве runtime был указан .Net Framework 2.0


Такие пироги :-)

суббота, 28 июля 2007 г.

Утилиты для отладки веб-приложений

Как и всякий веб-разработчик, я нередко нуждаюсь в утилите, которая покажет мне трафик между веб-сервером и браузером. Особенно это важно, если разрабатываешь AJAX-приложение, а оно работает неправильно. Ну и бывает, нужно посмотреть, как работают приложения других разработчиков :-)

Раньше, я использовал Proximitron. Это приложение Windows, которое изначально предназначно для фильтрации всякого рода рекламы, pop-up-ов и проч. Ну и заодно, показывает HTTP трафик.

Но Proximitron давно не обновлялся, да и настраивать каждый раз параметры proxy в браузере мне было очень лениво, и я стал искать замену...

Devolutions.HTTPSpy

Почти сразу я нашел очень прекрасный и совершенно бесплатный (есть и pro-версия за $50) Devolutions.HTTPSpy.Net, который показывал мне HTTP трафик между локальной машиной и удаленным сервером.



Правда, у HTTPSpy есть один большой минус - он не умеет показывать локальный трафик. То есть, если я отлаживаю свое приложение локально - толку от него нет. И я стал искать дальше...

IEAnalyzer

Поиск выдал довольно коммерческих продуктов, которые встраиваются в браузер и умеют показывать локальный трафик. Одним из низ был довольно удобный HTTPAnalyzer, который сделали те же ребята, что и IEInspector. Скачал, поставил месячный evaluataion, все в нем понравилось, только 130 долларов платить было жалко.

Nikhil Kothari's Web Development Helper
И вот - о чудо! В книге Dino Esposito про ASP.NET AJAX я наткнулся на упоминание утилиты, которую написал один из разработчиков Atlas - Web Development Helper. Бесплатный и все умеет. Работает как плагин для Internet Explorer. Умеет, кроме трафика, показывать еще всякие другие полезности:
* Показывает ASP.NET ViewState
* Atlas JavaScript Class Browser
* DOM Browser
Очень рекомендую
Ссылка на статью, посвященную WDH: http://www.nikhilk.net/WebDevHelperDebuggingTools.aspx
IE Development Toolbar
Ну и напоследок, IE Development Toolbar от Microsoft. Тоже незаменимая штука. Посмотреть описание и скачать.
UPD 22 aug:
* HttpWatch ($200+): http://www.httpwatch.com/

UPD 19 jan 09
* еще можно пользоваться сниффером (http sniffer) - WireShark  (бывший Ethereal)

среда, 4 апреля 2007 г.

IIS 7

Статья о том, что же такое есть IIS 7: http://msdn.microsoft.com/msdnmag/issues/07/03/IIS7/

Вкратце, самое важное (для меня :-)
  • Программное управление из .Net - пространство имен System.Web.Administration
  • Возможность писать вещи, подобные ISAPI, на .Net. Создатели вообще обещают хорошую и годную объектную модель, лучше-чем-раньше. Как всегда, впрочем.
  • Улучшенная диагностика.

Что ж, будем ждать longhorn server...

PS: Собственно, сайт IIS - http://www.iis.net