Преимущества наличия не совместимых услуг в WCF?
Мы ведем некоторые дискуссии об использовании WCF, создании сервисов и поддержке клиентов.
В настоящее время мы поддерживаем клиента Silverlight, предоставляя версии Silverlight наших клиентских библиотек сервисов, чтобы мы могли строго соблюдать тип нашего контракта на обслуживание, который определяется с помощью интерфейсов.
Это нормально, но наличие службы, определенной с помощью интерфейсов, делает ее неудобной для других клиентов, так как WSDL имеет много методов, возвращающих ArrayOfAnyType, и все это просто объекты на стороне клиента (которые могут быть приведены к правильному типу, но, как я уже сказал неловко).
Мы могли бы переписать наши сервисы, чтобы использовать явные DTO для передачи сообщений и воссоздать наши бизнес-объекты, используя аналогичные библиотеки на стороне клиента, что сделало бы наш сервис более функционально совместимым.
Однако выполнение этого, похоже, блокирует некоторые параметры для нас, такие как использование EntityFramework и сущностей самоконтроля, которые он предоставляет, так как для них требуется, чтобы одни и те же библиотеки использовались на клиенте и сервере и не были совместимы (поправьте меня, если я получил это неправильно)
Кажется, что существует компромисс между функциональной совместимостью и доступом к большему количеству функций из коробки, что позволяет быстрее разрабатывать решения.
Поэтому мой вопрос заключается в том, какие преимущества мы получаем, решив не взаимодействовать и поддерживать только клиенты.net и silverlight (если поддержка клиентов silverlight может считаться не совместимой)? И какие полезные функции.net мы блокируем, решая, что они совместимы?
Существуют ли стандартные методы, позволяющие сосуществовать обоим типам решений, так что вы можете поддерживать клиенты.net, используя весь спектр доступных вам функций, но при этом хорошо поддерживая других клиентов.net?
1 ответ
Вы можете использовать шаблон фасада для этого.
Переместите свою текущую логику на бизнес-уровень, не раскрывайте ее через WCF.
Теперь создайте 2 службы WCF, по одному для каждого из контрактов, которые вы хотите поддержать. Этот слой отобразит объекты бизнес-уровня на объекты контракта и вызовет функциональность на бизнес-уровне.
Тогда у вас будет центральное место для всех логических и пользовательских сервисов для каждого клиента.