Разместите сервис WCF или попросите потребителей разместить его? - PullRequest
1 голос
/ 28 августа 2011

Мне нужно реализовать мостовое приложение в .NET, которое, на высоком уровне,

  • на обратной стороне говорит с системой OCR, отправляя им изображения и получая обратно данные из изображений в читаемом формате
  • на лицевой стороне приложения будут использовать службу моста (WCF или другое), отправляя изображения и ожидая читаемых данных в качестве ответа.

Вся операция будет в асинхронном режиме.

Приложения, которые будут использовать службы моста, могут быть преимущественно на основе .NET или Java. (в будущем также может появиться возможность создания приложений для мэйнфреймов)

Мой вопрос касается решения для отправки обратно читаемых данных обратно в приложение-потребитель. Поскольку обратный вызов WCF не совместим с Java, я не могу использовать wsDualHttpBinding. Следовательно, в настоящее время я вижу 2 альтернативы:

  • a) Разместите другой веб-сервис на мосту, который потребляет Приложение может опросить.
  • б) Пусть каждое потребительское приложение размещает веб-сервис на основе стандартизированный wsdl, предоставляемый мостом по собственной технологии. Тогда мост будет использовать веб-сервис приложения, когда их данные готовы.

Проблемы с обоими вариантами:

  • С а) опрос всегда ресурсоемкий, но потребитель Приложение должно использовать только этот веб-сервис (генерировать свои собственные прокси класс).
  • С b для каждого приложения, которое необходимо зарегистрировать с помощью моста они должны создать свой собственный веб-сервис. это кажется, не так слабо связаны, как рекомендует архитектура SOA.

Мой вопрос: какой из них предпочтительнее, чтобы система была расширяемой и масштабируемой? Есть ли другой способ реализовать это?

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Я бы выбрал в этом случае решение a), хотя это может означать опрос ... НО решение b) может иметь проблему, если между ними могут быть меры безопасности (сеть / брандмауэр / прокси ...), которые могут привести к вашей службене в состоянии вызвать их службу ... или они могли бы реализовать WSDL каким-то несовместимым способом ...

Даже если вы реализуете решение b) ИМХО, вам придется предоставить решение a) в качестве запасного варианта ...

Решение a) имеет наибольшую вероятность нормально работать, так как клиенты уже должны реализовать некоторые вызовы веб-службы для отправки данных изображения ...

И вы можете сделать решение a) на стороне сервера, а неэффективен, потому что операция (OCR) является сравнительно «длительной», и, таким образом, текущее состояние может быть сильно кэшировано в веб-сервисе - возможно, обновления состояния каждые 10 секунд или около того будет достаточно ...

РЕДАКТИРОВАТЬ:

Другая проблема с решением b): что произойдет, если их веб-сервис не работает в течение нескольких минут, когда вы пытаетесь вызвать его?Вам нужно было бы реализовать какую-то (постоянную?) Очередь и т. Д., Чтобы сделать это надежным ...

0 голосов
/ 30 августа 2011

Я бы реализовал это следующим образом, используя pub-sub:

Создайте два сообщения: GenerateOCRDataRequest - содержит ClientID, байт изображения [] OCRProcessCompleted - содержит ClientID, байт ProcessedData []

Клиентское приложение будет подписываться на OCRProcessCompleted с их различным clientID в качестве фильтра.Они также опубликуют GenerateOCRDataRequest и включат свой clientID, чтобы при возврате ответа они получали только свои собственные запросы.

Приложение-мост подпишется на GenerateOCRDataRequest - когда оно его получит, оно его обработает, а затем опубликуетOCRProcessCompleted с необходимыми данными

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

Если вы хотите реализовать сценарий примерно так, как описано, вы можете использовать http://pservicebus.codeplex.com/, который предоставляет api как на Java, так и .NET для создания pub-sub.Здесь также есть примеры того, как его использовать: http://pservicebus.codeplex.com/wikipage?title=Samples%2fExamples&referringTitle=Home

Надеюсь, это поможет

...