понедельник, 29 августа 2011 г.

Рекомендации по разработке под WCF от Michele

Давненько ничего не выкидывал в блог по WCF. Пора наверстать упущеное.

Некоторые рекомендации от Michele Leroux Bustamante по разработке WCF сервисов в моем вольном переводе. Оригинал записи тут.

·         SOA

o   SOA хорошая штука, сервисы хороши для повторного использования, однако не стоит перебарщивать.

o   Попробуйте создать 2-3 при простом обращении к сервису.

·         Addressing

o   Никогда не зашивайте в коде базовый адрес или адрес endpoint’а.

o   Задавайте базовый адрес в конфигурации.

o   Будет еще лучше, если вы будете использовать runtime конфигурацию для упрощения управления конфигурацией веб-фермы (необходимо дописывать свой код).

·         Хостинг

o   Используйте хостинг в консольном приложении для начального тестирования, если конечно хостинг на IIS\WAS не доступен локально.

o   Всегда тестируйте сервис на реальном хостинге.

o   Попробуйте использовать WAS с AppFabric если это возможно.

o   Используйте AppFabric для автостарта и визуализации ошибок (предпочтительно использовать свою систему диагностики для централизации предупреждений, исключений, отладочной информации и трейсов).

o   Служба Windows удобна в случае неизвестной конфигурации при развертывании.

o   Оператор using

§  Нормально для тестовых хостов (например консольного), когда при закрытии уничтожается домен приложения.

§  Не круто для остальных хостов (cлужбы Windows, рабочей роли, клиента windows), где вы должны разделять вызов Close() в обычном случае и Abort() при наличии исключений, чтобы нормально очистить ресурсы.

§  Никогда не используйте using для проксиков.

o   Типично использовать свой хост для настройки общих behavior и инициализации endpoint’ов

§  Требуется ServiceHostFactory для endpoint’ов на IIS/WAS.

·         Bindings

o   Вы всегда будете настраивать стандартные binding’и

§  Ограничения на размер сообщения и чтения из пакета.

§  Безопасность

o   Часто требуется <customBinding>.

§  Для настройки специальных возможностей, которые не предоставляют стандартные binding’и.

o   Сначала завершите разработку общего дизайна системы, потом устанавливайте шаблон binging’а.

§  Включение модели безопасности.

§  Вы, возможно, придете к 2-3 binding’ам, которые будут использованы клиентами/сервисом и другими слоями.

§  Оберните их в повторно используемые типы binding’ов, чтобы вызывать в runtime или сконфигурируйте с помощью своей секции конфигурации.

o   Создание разделяемого кода между клиентом и сервисом (если такое возможно).

§  Клиентская версия может незначительно отличаться.

·         Endpoints

o   Храните требования enpoint’а в разделяемом коде между клиентом и сервисом, если он у вас есть с обеих сторон.

§  Динамические аспекты, такие как базовый адрес придет из соответствующих конфигурационных файлов.

o   Инициализируйте endpoint’ы программно (свой  ServiceHost и код для инициализации прокси).

§  Хорошо, при использовании веб-ферм. Уменьшает затраты на обновление множества серверов.

§  Не требуется для Windows Azure? Но все равно полезен.

·         Proxies (клиентские прокси-классы)

o   Используйте генерацию прокси классов только для тестирования или клиентов, которые не распостраняют свои компоненты.

o   Создайте отдельную разделяемую библиотеку контрактов (контракты сервисов, сообщений, исключений) и сущностей (контракт данных, код собственной сериализации).

o   Всегда вызывайте Close() явно и Abort() в случае исключений.

o   Желательно не использовать ClientBase<T>, больше контроля наз каналом и фабрикой каналов.

§  Используйте свой базовый класс, например WCF Proxy Generator (http://wcfproxygenerator.codeplex.com/)

§  Примечание: обновленный экземпляр будет размещен на этой неделе.

Posted via email from Комуникликабельность

Комментариев нет: