Ответы пользователя Чак Норрис - CodeHelper

Чак Норрис

Чак Норрис
Карма 3384
Имя Неизвестно
Возраст Неизвестно
Сайт Неизвестно
Twitter Неизвестно
Участвует в проекте 1103 дн., 22 час., 55 мин.
Последняя активность 535 дн., 7 час., 46 мин. назад
О себе ничего не указано

Ответы

Новые Лучшие
1
2
3
4
5
6
...
12
Перейти к вопросу →

Статический метод WebConfigurationManager.GetSection по идее должен возвращать секцию текущего приложения. Но, возможно, если его вызвать не в том месте, то конфигурация не подцепается. Можно попробовать подгрузить её вручную:

var config = WebConfigurationManager.OpenWebConfiguration("/");
MayConfiguration configSection = (MayConfiguration) config.GetSection(
   "MayConfiguration");
Перейти к вопросу →

Вообще, метод RenderWebPart пишет в поток вывода текстовую разметку и ресурсы должны подгружаться браузером отдельно, например с использованием того же HttpHandler'а. Конечно, в описанной архитектуре это не очень удобно. Если есть возможность переделать, то желательно хранить картинку на диске, а в базе хранить только путь. Тогда в методе RenderWebPart достаточно будет генерировать теги с указанием пути

а дальше браузер сам запросит файл у сервера. В крайнем случае, если нельзя переделать на файлы, хотя бы хранить картинку в отдельном поле таблицы базы, чтобы хендлеру не пришлось доставать её из документа.

Есть еще варианты встраивания данных картинки прямо в текстовый HTML, но такие подходы работают не во всех браузерах:

1 Использование src=data

Данные файла картинки можно встроить в текстовом формате в атрибут src:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAFSDNYfAAAAaklEQVR42u3XQQrAIAwAQeP%2F%2F6wf8CJBJTK9lnQ7FpHGaOurt1I34nfH9pMMZAZ8BwMGEvvh%2BBsJCAgICLwIOA8EBAQEBAQEBAQEBK79H5RfIQAAAAAAAAAAAAAAAAAAAAAAAAAAAID%2FABMSqAfj%2FsLmvAAAAABJRU5ErkJggg%3D%3D" alt="" />

Получается вот что:

Недостаток: не работает в IE до версии 8.

2 Конвертация картинки в HTML

Метод для особых извращенцев, но работает даже в IE. Суть — картинка конвертируется в набор HTML-тегов, которые при визуальном формировании в браузере выглядят как исходное изображение. Вот пример. Но такая конвертация, наверное, может занять больше времени чем чтение из базы)

Перейти к вопросу →

Нужно использовать атрибут ServiceKnownType и применять его в интерфейсе сервиса (на сам интерфейс или на отдельный метод):

[OperationContract]
[ServiceKnownType(typeof(HashHead))]
[WebGet(UriTemplate = "Head1", ResponseFormat = WebMessageFormat.Json)]
    MyMessage GetJsonHead1()
{
    JsonMessage result = new JsonMessage();
    result.Head = new HashHead("test","test");
    return result;
}
Перейти к вопросу →

Есть хорошая статья по этому поводу:

http://www.sovavsiti.cz/css/hr.html

Общий вывод из статьи такой — стилизовать HR очень сложно. Потому что каждый браузер отображает его по-свойму. Opera, например, рисует вокруг HR бордюр, который нельзя убрать. Есть проблемы и с хромом. Самое простое решение для кроссбраузерной стилизации — отказаться от HR и использовать обычный DIV.

Перейти к вопросу →

Вручную из RouteData извлекать не обязательно, достаточно прописать эти параметры в аргументах метода:

    [HttpGet]
    public ActionResult addLine(int id, int pid)
    {
        OrgForm newline = new OrgForm();
        TempData["curPer"] = pid; // для ссылки "Назад" в текущий период
        TempData["curFrm"] = id;  // для ссылки "Отмена"
        return PartialView("partAddInOrgForm", newline);
    }

    [HttpPost]
    public ActionResult addLine(OrgForm lineAdd, int id, int pid)
    {

        int cfrm = id;
        Form frm = db.Forms.Where(f => f.formID == cfrm).First();
        lineAdd.Form = frm;
        int cper = pid;
        Period per = db.Periods.Where(p => p.perID == cper).First();
        lineAdd.FPeriorm d= fperm;
        db.AddToOrgForms(lineAdd);
        db.SaveChanges();
        List<OrgForm> orgFrm = (from of in db.OrgForms where of.perID == cper && of.formID == cfrm orderby of.lineCod select of).ToList();
        return PartialView("partOrgForms", orgFrm);
    }

Еще нужно убедиться, что параметр pid передаётся в POST-параметрах, т.к. если при извлечении pid вылетает подобная ошибка, то вероятно это значение вообще не было передано на сервер.

Перейти к вопросу →

NHibernate, как и большинство ORM-библиотек, использует шаблон UnitOfWork, чтобы управлять жизненным циклом таких объектов как сессия и транзакция. Обычно, чтобы не привязывать логику отображения к логике ORM, в приложениях пишется собственный класс UnitOfWork, являющийся оберткой над сущностями ORM (NHibernate). Этот класс выглядит примерно так:

public class UnitOfWork: IUnitOfWork, IDisposable {
    public UnitOfWork(){
        // Создаем общую сессию NHibernate
    }

    public void Dispose(){
        // Комитим изменения сессии или просто закрываем ее
    }
}

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

using(CreateUnitOfWork()){
    var item = new Item();
    ItemRepository.Add(item);
}
Перейти к вопросу →

Для веб-приложения логично привязать время жизни сессии NHibernate ко времени жизни запроса (request). Новая сессия открывается при запросе к серверу и закрывается когда запрос обработан и пользователю вернулся ответ. Практически все web-каркасы поддерживают механизм слежения за жизненным циклом запроса. В ASP.NET можно использовать модули и хендлеры.

Spring.NET уже имеет в своей поставке специальный модуль для этих целей — OpenSessionInViewModule. Сам механизм привязки сессии к запросу в терминологии Spring называется open session in view (OSIV) pattern.

Перейти к вопросу →

По умолчанию в WCF callbacks настроены так, чтобы вылеть в том же потоке, в котором создан сам callback-объект. Если callback-объект создается в потоке, связанном с GUI (например в форме WinForms), то он становится привязанным к этому потоку. Это создает ситуацию аналогичную deadlock`у: callback ждет когда закончит выполнение инициировавший его метод, а метод не может закончиться, потому что ждет когда выполнится callback. В итоге метод вызова сервиса прекращает работу с сообщением о таймауте. Исправляется это следующим образом:

Изменяем ConcurrencyMode в поведении сервиса на Reentrant:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
                 ConcurrencyMode=ConcurrencyMode.Reentrant)]
public class SampleService : ISampleService
{
    // ...
}

Устанавливаем значение свойства UseSynchronizationContext в false для поведения callback-объекта:

[CallbackBehavior(UseSynchronizationContext = false)]
class ServiceCallback : ISampleServiceCallback
{
    // ...
}
Перейти к вопросу →

Судя по всему, дело как раз в том что взаимодействие через wsDualHttpBinding должно работать в обе стороны. Возможно в этом случае затруднительно применить security-средства самого протокола. Ведь изначально http был чисто односторонним протоколом.

Вообще, бытует мнение, что двухстороннее общение сервера и клиента — это не очень хорошая вещь. Особенно когда идет речь о вызове удаленных методов. Причин здесь много:

  • сервер становится зависимым от клиента;
  • проблемы с безопасностью на клиенте (грубо говоря, на клиенте нужно открыть порт для входящих запросов);
  • и тд
Перейти к вопросу →

Можно использовать открытую библиотеку EasySMPP:

Библиотека-обертка над протоколом SMPP служит для быстрой и легкой разработки клиентов SMSC(Short Message Service Centre). Простые в использовании классы и API покрывают всю функциональность, требуемую для SMS-приложения. Написана на чистом C# для использования в .NET 2.0.

В поставку включены исходники и пример клиента, построенного с использованием EasySMPP.


1
2
3
4
5
6
...
12
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.