Наша компания использует архитектуру служебной шины Oracle (OSB). Моему отделу необходимо предоставить этой OSB несколько сервисов, которые впоследствии будут использоваться различными приложениями в разных отделах и технологиях. У меня есть 7-8 приложений, и все они основаны на Microsoft (VB6, C#, SQL Server). Мой вопрос: является ли WCF хорошим вариантом для разработки наших сервисов на основе данных? Хорошо ли он интегрируется с OSB? Есть ли проблемы с интеграцией? Какова наилучшая практика и какой транспортный протокол для wcf следует использовать в этом сценарии?
Является ли WCF хорошим вариантом для предоставления услуг Oracle Service Bus
Ответы (2)
Я участвовал в успешных проектах по интеграции WCF с OSB с использованием SOAP/HTTP в качестве транспортного протокола.
Исходя из предыдущего опыта, следует избегать двух ключевых рисков:
- Архитектурное разграничение — вам нужно разобраться, где будет жить оркестровка, учитывая, что обе платформы поддерживают ее, а WCF имеет всевозможные странные и дурацкие функции, которые могут обеспечить преимущества в производительности.
- Интеграция безопасности — хотя обе платформы обеспечивают реализацию общих стандартов безопасности, мой опыт пару лет назад показал, что они НЕ очень хорошо сочетаются друг с другом.
Если подход заключается в WCF для обеспечения интеграции данных и OSB для обеспечения центральной точки доступа и обеспечения соблюдения (возможно, наряду с интеграцией), то это фантастика. Это четкая линия на песке.
Я согласен с ответом Кевина. Из того, что я видел, WCF довольно хорошо работает с продуктами Microsoft, но не так хорошо с другими. Если вы сохраните свою реализацию службы WCF довольно простой и оставите всю тяжелую работу OSB (например, безопасность, политику, адресацию), тогда все может быть в порядке.
Еще одна ловушка, о которой следует помнить, заключается в том, что WCF связывает типы XML с собственными типами .NET. Хотя это нормально для большинства типов, одной вещью, которая вызвала у нас много головной боли, были даты. В XML вы можете иметь нулевую дату, но в .NET дата является примитивным типом, а не объектом, и поэтому умирает, когда вы пытаетесь сделать ее нулевой. Вы можете обойти это, обработав их как строки (yuk) и преобразовав в/из в своем приложении, или я считаю, что вы также можете создать пользовательскую привязку, где вы могли бы обернуть тип даты в объект DateWrapper, чтобы обслуживать нули .
Лично мне нравится, что модель служебной шины является просто фасадом для реализации, размещенной в другом месте, поэтому с этой точки зрения я не думаю, что имеет значение, какая технология используется за обложками службы, открытой для OSB.
- Если вы хотите использовать WCF, потому что вам нравятся его функции и он хорошо интегрируется с вашими приложениями, сделайте это.
- Если вы выбираете его только потому, что он связан с услугами и кажется, что он хорошо подходит для OSB, возможно, посмотрите, есть ли другие альтернативы, которые несут меньшие накладные расходы для вас и вашей команды разработчиков.
С точки зрения транспорта, если ваши службы данных предназначены для доступа к данным нетранзакционным способом (например, для получения сведений о клиенте), тогда SOAP/HTTP подойдет. Если вы имеете дело с транзакционными данными, рассмотрите транспорт на основе обмена сообщениями, такой как JMS или MQ, поскольку, по опыту, поддержка WS-ReliableMessaging еще не везде или непротиворечива.
Надеюсь, это поможет.