Записи с тегом «.NET»

Specified-поля в SOAP веб-сервисах

27.05.2011 16:52 / Артём Волк / 443 просмотра / ...

В уже упоминавшемся ASP.NET-приложении, которое использует сторонний SOAP-веб сервис, для генерации proxy-классов использует механизм, доступный из Visual Studio как «Add Web Reference». После обновления до Visual Studio 2010 SP1 для элементов, объявленных в WSDL с аттрибутом minOccurs="0" с типом, отличным от type="xsd:string", например, так:

<xsd:element minOccurs="0" name="MyField" type="xsd:boolean" />

В proxy-классах генерировалось дополнительное свойство bool MyFieldSpecified. Если не поставить его в true перед вызовом веб-сервиса, поле не будет включено в SOAP-запрос. В моём случае изменить веб-сервис не было возможности (он сторонний), а все поля в вызове сервиса на самом деле обязательные. Найденные существующие решения либо требовали дополнительной обработки кода proxy-классов, либо ручного заполнения свойств или не подходили в моей ситуации.

решение...

Перехват и отладка запросов к SOAP веб-сервису в .NET

15.05.2011 22:39 / Артём Волк / 714 просмотров / ...

Одно из наших ASP.NET-приложений использует сторонний SOAP-веб сервис. На стороне .NET исторически (со времён .NET 2.0) для генерации proxy-классов использовался механизм, доступный из Visual Studio как «Add Web Reference» (подробнее о способах добавления ссылки на веб-сервис можно можно прочитать здесь, стоит только заметить, что в Visual Studio 2010 SP1 соответствующий пункт меню переехал внутрь диалогового окна «Add Service Reference»).

Во время отладки приложения понадобилось проверить XML-код SOAP-запроса. Сделать это оказалось довольно просто. Во-первых, в код приложения нужно временно добавить:

var myService = new MyServiceProxyClass();

// Перенаправляем запросы через HTTP-прокси
myService.Proxy = new System.Net.WebProxy("http://127.0.0.1:8888");

// Используем сервис как обычно...

Во-вторых, нужно запустить HTTP-прокси по указанному адресу. Мы использовали Fiddler, он позволяет просматривать весь HTTP-траффик, который через него проходит.

Решение для WCF-сервисов ещё не нашлось...

Шаблоны e-mail'ов в ASP.NET MVC

01.04.2011 21:39 / Артём Волк / 627 просмотров / ...

По аналогии с решением для WebForms, в ASP.NET MVC можно использовать для генерации текста e-mail'ов обычные view. Работающее решение нашлось на одном, к сожалению, не отзывающемся сейчас сайте.

читать дальше...

Extension-методы для DataRow и DataTable

04.03.2011 20:21 / Артём Волк / 504 просмотра / ...

Долгое время использовал такую конструкцию если нужно было получить данные из нетипизированного DataRow:

var temp = Convert.ToInt32(row["SomeField"]);

В случае, когда нужно было обработать nullable-поля, то использовался вот такой метод:

/*
 * Taken from: http://stackoverflow.com/questions/209160/nullable-type-as-a-generic-parameter-possible
 */
public static Nullable<T> GetValueOrNull<T>(DataRow row, string key) where T : struct
{
	object columnValue = row[key];

	if (!(columnValue is DBNull))
		return (T)columnValue;

	return null;
}

...

int? temp = GetValueOrNull<int>(row, "SomeField");

Оказалось, что есть более простой способ с использованием extension-метода Field<>():

int temp = row.Field<int>("SomeField");

Для класса DataTable есть свой набор полезных расширений

Ошибка "The full-text query parameter for Fulltext Query String is not valid" после обновления на .NET 4.0

20.02.2011 20:34 / Артём Волк / 563 просмотра / ...

После обновления до ASP.NET 4.0 реализация полнотекстового поиска с LINQ2SQL, описанная в сниппете более чем годичной давности перестала работать со следующей ошибкой: The full-text query parameter for Fulltext Query String is not valid.

читать дальше...

Ошибка Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась) или 404 во время PostBack при использовании HTML-тега base

14.06.2010 16:19 / Артём Волк / 1169 просмотров / ...

Проблема возникает, если для страниц сайта на ASP.NET Web Forms определён тег <base />, например, следующим образом:

<base href="http://example.com" />

Страницы, находящиеся на том же уровне, что и URL в теге <base /> будут работать нормально (например, такая страница: http://example.com/SomePage.aspx), но стоит попытаться использовать ещё одну страницу с тем же именем в подпапке, например, http://example.com/Folder/SomePage.aspx и при первом PostBack'e возникнет ошибка «Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась)». В случае, если на сайте существует только одна страница с таким именем, т.е. или http://example.com/Folder/SomePage.aspx, или http://example.com/SomePage.aspx ошибка будет уже стандартной HTTP-ошибкой 404.

Причина ошибки в том, что тег <form> будет сформируется следующим образом:

<form name="aspnetForm" method="post" action="SomePage.aspx" id="aspnetForm">

Из-за тега <base /> результирующий URL для отправки формы будет неверным: http://example.com/SomePage.aspx, где часть http://example.com/ берется из тега <base />, а SomePage.aspx из атрибута action формы.

Способ исправления этой ошибки аналогичен решению проблемы с PostBack'ом при использовании URL Rewriting'а.

Запись параметров конфигурации в App.config

26.04.2010 10:36 / Артём Волк / 1442 просмотра / ...

Для консольных и WinForms приложений для хранения параметров конфигурации удобно использовать файл App.config, сохраняя собственные параметры в секции <appSettings />. Иногда бывает необходимо не только читать эти параметры, но и изменять их значения. Конечно, для серьезного приложения этот способ не очень хорош (нужны права на запись), но для какой-то небольшой консольной утилиты с тремя параметрами — в самый раз.

читать дальше...

Генерация не-HTML контента в ASP.NET MVC

18.01.2010 23:04 / Артём Волк / 915 просмотров / ...

Иногда бывает нужно сгенерировать контент с Content-Type отличным от text/html, например, RSS-ленту или JavaScript-информер. В случае использования WebForms или ASP.NET MVC с WebForms View Engine проблема решается следующим образом:

<%@ Page ContentType="application/x-javascript" Language="C#" Inherits="..." %>

или, например:

<%@ Page ContentType="application/rss+xml" Language="C#" Inherits="..." %>

P.S. Для RSS конечно правильнее будет использовать встроенные средства .NET Framework'a, но, например, если нужно добавить нестандартные теги, возможно, решение с шаблоном будет удобнее.

ASP.NET HTTP-хендлер, возвращающий данные в формате JSON

28.11.2009 17:30 / Артём Волк / 2139 просмотров / ...

Существует несколько способов вернуть данные в формате JSON из ASP.NET:

пример HTTP-хендлера...

Singleton в ASP.NET (per-request singleton)

26.11.2009 21:01 / Артём Волк / 983 просмотра / ...

Классическая реализация Singleton'a с использованием статического поля класса не всегда подходит для ASP.NET: веб-сайт является приложением, которое запускается при первом запросе к нему и работает, пока в нём есть необходимость. Таким образом все пользователи веб-сайта будут использовать один и тот же экземпляр singleton'a, что не всегда желательно.

вариант реализации...


Страница 1 из 3