Чак Норрис
- Вопросы
- Ответы
Имя | Неизвестно |
Возраст | Неизвестно |
Сайт | Неизвестно |
Неизвестно | |
Участвует в проекте | 1104 дн., 17 час., 5 мин. |
Последняя активность | 536 дн., 1 час., 56 мин. назад |
Ответы
Перейти к вопросу →
На самом деле все проще чем кажется — нужно просто положить файл Settings.StyleCop в ту папку, где расположены все проекты.
Перейти к вопросу →
Нужно использовать свойства из категории Loyout
. Значения этих свойств позволяют полностью управлять компановкой элементов. Вот некоторые из них:
Свойство Dock — позволяет задать область контейнера, которую будет занимать данный элемент (весь контейнер или вся верхняя/нижняя/левая/правая часть контейнера).
Свойство Anchor — позволяет задать стратегию изменении размера элемента при изменении размера его контейнера. Можно отметить любой из флагов — Left
, Right
, Top
, Bottom
. Комбинируя эти флаги, можно добиться того, чтобы элемент (кнопка, поле ввода и т.п.) был «привязан» к одному из краёв формы или наоборот — занимал область, пропорциональную размеру формы.
Перейти к вопросу →
Нужно пометить enum
атрибутом DataContract
, а все значения — атрибутом EnumMember
:
[DataContract]
public enum SomeEnum
{
[EnumMember]
Value1,
[EnumMember]
Value2,
[EnumMember]
Value3
}
Перейти к вопросу →
Если сервисы работают под .NET 3.5, то проблема обычно решается прописыванием примерно таких строк в web.config:
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://example.org:1234" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
Где выделенный адрес — это базовый URL для всех сервисов. Подробнее о проблеме можно почитать в статье How can WCF support multiple IIS Binding specified per site ?
Перейти к вопросу →
Самый простой способ — подписаться на событие BeginRequest
в файле Global.asax и в теле обработчика выполнить все необходимые действия:
void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
string currentLocation = context.Request.Path.ToLower();
string rewritedLocation = GetRewritedLocation(currentLocation); 1
if (currentLocation != rewritedLocation)
{
context.RewritePath(rewritedLocation); 2
}
}
1 — метод GetRewritedLocation
содержит логику подмены (код не приводится);
2 — собственно, подмена URL.
Поскольку код из Global.asax сложно тестировать и повторно использовать, то лучшим решением будет реализация той же логики в http-модуле (IHttpModule). В коде модуля, как и в коде Global.asax, можно подписаться на событие начала обработки запроса и выполнить аналогичную подмену.
Перейти к вопросу →
Найдено такое решение:
pre {
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
Перейти к вопросу →
В jQuery есть специальная функция param
, которая
сериализует массив элементов формы или набор пар ключ ↔ значение в строку запроса
Используется так:
var queryString = $.param(keyValueSet);
Перейти к вопросу →
У класса Console
есть метод SetCursorPosition
, который позволяет переместить курсор в любую точку консоли. При этом следующие методы Write
будут выводить текст именно от этой точки. Используя свойства Console.CursorLeft
и Console.CursorTop
можно задать смещение относительно текущего положения курсора.
Перейти к вопросу →
Вопрос о том, должна ли модель валидировать себя, вызывывает массу холиваров. Так же как вопрос о том, является ли валидация бизнес-логикой. В контексте WPF, возможно, дело обстоит иначе, потому что вид обычно имеет дело не с моделью предметной области, а с моделью вида (если, конечно, используется MVVM или подобный паттерн). Но, все-таки, лучший фреймворк валидации — тот, который минимально затрагивает классы модели и не тянет за собой «хвостов» в виде зависимостей. В частности, требование наследования модели от базового класса из библиотеки валидации кажется очень неприятным.
Для ASP.NET MVC сейчас активно продвигается валидация с помощью Data Annotations. Не знаю, имеется ли в настоящий момент поддержка для WPF, но есть подозрения, что в будущем этот механизм станет стандартным для технологий MS. Достоинство Data Annotations в их легковесности. Отдельная DLL (System.ComponentModel.DataAnnotations.dll) содержит атрибуты, которыми нужно помечать свойства классов предметной области. При этом System.ComponentModel.DataAnnotations
— стандартное пространство имен .NET и не тянет за собой никаких зависимостей, так как не включает логику отображения ошибок для какого-то конкретного движка (WinForms, WPF, WebForms, MVC и тд).
Перейти к вопросу →
Известно, что первый вызов WCF сервиса занимает несколько больше времени, чем остальные. Это связано с тем, что в момент первого вызова происходит инициализация стека канала, security и т.п. Но обычно речь идет о задержке порядка 1-3 секунд, а никак не 20 секунд. Если проблема тут в WCF, то можно попробовать облегчить binding, убрав неиспользуемые настройки безопасности для канала. Для wsHttpBinding:
<bindings>
<wsHttpBinding>
<binding name="Binding1">
<security mode="None">
<transport clientCredentialType="None" />
<message establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
</bindings>
Для netTcpBinding:
<bindings>
<netTcpBinding>
<binding name="PortSharingBinding" portSharingEnabled="true">
<security mode="None" />
</binding>
</netTcpBinding>
</bindings>
Также есть мнение, что первый вызов замедляет процедура поиска настроек прокси, прописанных в системе. Если не нужно использовать системное прокси, то его отключение (useDefaultWebProxy="false"
) должно повысить быстродействие.
Можно попробовать посмотреть логи WCF, чтобы выяснить, на какую операцию уходит больше времени. Для этого можно использовать стандартный инструмент Service Trace Viewer Tool (SvcTraceViewer.exe). В документации сказано, что уровень логгера Information может быть использован для замеров производительности.