Чак Норрис
- Вопросы
- Ответы
Имя | Неизвестно |
Возраст | Неизвестно |
Сайт | Неизвестно |
Неизвестно | |
Участвует в проекте | 1103 дн., 22 час., 55 мин. |
Последняя активность | 535 дн., 7 час., 46 мин. назад |
Ответы
Перейти к вопросу →
Вообще считается, что есть 3 способа сжатия WCF трафика. Вот перевод источника:
- На транспортном уровне, используя message encoder, который сжимает все данные проходящие через канал. Есть пример такого подхода в WCF SDK, [SDK Folder]TechnologySamples/Extensibility/MessageEncoder/Compression
- На уровне сообщений, добавляя определенные метаданные к SOAP-сообщению и сжимая тело этого сообщения. Можно использовать специфический WCF binding или MessageInspector Behavior чтобы модифицировать тело сообщения. Вот пример такого подхода: WS-Compression for WCF.
- Только для транспорта на протоколе Http (не наш случай) можно использовать поддержку сжатия самого протокола.
Ну и конечно не следует забывать про оптимизацию на уровне приложения а не на уровне WCF. Сами классы DataSet и DataTable довольно-таки тяжеловесные, хотя не могу сказать относится ли это к сериализации для передачи через WCF. Где-то попадалось, что для оптимизации сериализации датасетов нужно задать пару свойств:
ds.SchemaSerializationMode = SchemaSerializationMode.ExcludeSchema;
ds.RemotingFormat = SerializationFormat.Binary;
Перейти к вопросу →
Да, можно. Нужно использовать те же методы, что и для обычных заглушек, только с окончанием MultiMock:
MockRepository.CreateMultiMock(...);
MockRepository.DynamicMultiMock(...);
MockRepository.PartialMultiMock(...);
MockRepository.StrictMultiMock(...);
И это является одной из фишек Rhino Mocks, потому что многие другие фреймворки такой возможности не предоставляют. Однако, в сообществе ведутся споры о целесообразности мокирования нескольких интерфейсов. В частности, говорится о том, что интерпретация одного и того же объекта в разных формах вредит читабельности теста, усложняет его и тд. Ведь если тест интерпретирует один объект как две разные сущности, значит он выполняет (как минимум) две операции над этим объектом, а отсюда следует что тест может быть разбит на 2 теста.
Перейти к вопросу →
Самой зрелой считается реализация от Yahoo:
Есть один минус — нужно использовать весь Javascript-стек от Yahoo.
Перейти к вопросу →
Похоже, что нельзя. Перегрузка операторов достапна только для классов и структур. Как альтернатива, можно определить extension method, выполняющий нужное действие. Или использовать структуру вместо enum, структуры дают больше возможностей кастомизации поведения.
Перейти к вопросу →
Можно использовать какие-нибудь rich контролы, например telerik.
Перейти к вопросу →
Очень важная фича — MVC 2 не конфликтует с первой версией! Значит на одном компьютере можно установить обе версии. При этом в Visual Studio можно создать проект, использующий любую из установленных версий.
Перейти к вопросу →
Наличие Silverlight обычно проверяется на клиенте с помощью Javascript (Silverlight.js). Для этого нужно проверить значение флага:
Silverlight.available
Если true
, то Silverlight установлен, в противном случае — нет.
Перейти к вопросу →
Есть мнение, что если MARS не включен, то при высокой нагрузке могут вылетать исключения:
Exception: There is already an open DataReader associated with this Command which must be closed first.
Stack Trace:
at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)
at System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command)
at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
at NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd)
at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, RowSelection selection, ISessionImplementor session)
at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
at NHibernate.Loader.Loader.LoadCollection(ISessionImplementor session, Object id, IType type)
Соответственно, лучше добавить в строку подключения активацию MARS:
MultipleActiveResultSets=true
Перейти к вопросу →
Есть класс HttpValueCollection
, который используется в ASP.NET. Служит этот класс как раз для того, чтобы преобразовывать коллекцию элементов ключ-значение в строку запроса URI. К сожалению, напрямую инстанцировать объект этого класса не получится, потому что он является внутренним. Но можно вызвать статичекий метод System.Web.HttpUtility.ParseQueryString
, возвращающий экземпляр базового класса — NameValueCollection
:
var paramsCollection = System.Web.HttpUtility
.ParseQueryString(string.Empty); 1
paramsCollection["param1"] = "paramValue1"; 2
paramsCollection["param1"] = "paramValue1";
//...
var uri = new Uri("http://example.com");
uri.Query = paramsCollection.ToString(); 3
1 — метод ParseQueryString
возвращает обычную коллекцию NameValueCollection
, в которую можно добавлять ключи и значения. Но на самом деле это объект класса HttpValueCollection
и при вызове ToString
ключи-значения будут преобразованы в строку запроса.
2 — заполняем коллекцию.
3 — устанавливаем строку запроса для объекта URI.
Перейти к вопросу →
В общем случае эта задача кажется нерешаемой. Ведь если не доверять расширению, то определить тип можно только заглянув внутрь файла и сделав выводы на основе его содержимого. Эту задачу можно решить для какого-то класса файлов, но не в общем случае. Например, файл картинки можно попробовать программно преобразовать в объект Image. Если получилось, то считать что в файле действительно «лежит» изображение.