Несколько сервисов WCF, ссылающихся на те же контракты данных

Я создаю ряд сервисов WCF, которые совместно используют контракты общих данных (или объекты, если Вы предпочитаете). Это простые объекты передачи данных, которые украшены атрибутами DataContract и DataMember. Я явно указываю имя и пространство имен. В попытке следовать за принципами рекомендации IDESIGN усреднения 12 участников на контракт на обслуживание, я повреждаю свой сервисный проект в многочисленные услуги.

Мои контракты данных находятся в отдельном блоке, который я могу предоставить нашим клиентам, если они используют .NET. Они могут сказать свою сервисную ссылку на типы повторного использования в блоках, на которые ссылаются. Однако, если они не используют .NET, и они используют 2 сервиса, которые оба используют тот же объект затем они, я принимаю, получит сообщение противоречивой ссылки. Я вижу это в Visual Studio, если я не ссылаюсь на контракт данных dll.

Мой вопрос, там что-нибудь, что я могу сделать в своих сервисах, или они могут сделать в клиентском приложении для обхождения необходимости квалифицировать, из какого прокси контракт данных прибыл?

19
задан 3 revs, 2 users 83% 21 July 2015 в 20:49
поделиться

5 ответов

Я также склонен хранить все свои контракты данных в одной сборке, на которую ссылается множество служб и множество клиентских приложений, что работает отлично, но я никогда не пробовал использовать службу вне .NET.

Было бы полезно узнать, какую технологию они используют для потребления службы, кроме .NET? Что выбрасывает сообщение об амбивалентной ссылке?

2
ответ дан 30 November 2019 в 05:11
поделиться

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

Я думаю, что лучший подход - это рефакторинг вашего контракта данных, чтобы вы поместили все общее для более чем одной службы в одну сборку и ссылались на них, поэтому у вас не будет этой неоднозначной или конфликтной проблемы независимо от того, сколько служб используется. клиентским приложением.

0
ответ дан 30 November 2019 в 05:11
поделиться

Я переключил небольшой подпроект с MySQL на CouchDB, чтобы иметь возможность обрабатывать нагрузку. Результат был потрясающим.

Около 2 лет назад мы выпустили самостоятельно написанное программное обеспечение на http://www.ubuntuusers.de/ (который, вероятно, является крупнейшим немецким веб-сайтом сообщества Linux). Сайт написан на Python, и мы добавили промежуточное программное обеспечение WSGI, которое смогло уловить все исключения и отправить их на другой небольшой веб-сайт на базе MySQL. Этот небольшой веб-сайт использовал хэш для определения различных ошибок и сохранял количество вхождений и последнее вхождение.

К сожалению, вскоре после выхода сайт traceback-logger больше не отвечал. У нас были некоторые проблемы с блокировкой производственной базы данных нашего основного сайта, которая выбрасывала исключения почти по каждому запросу, а также несколько других ошибок, которые мы не исследовали на этапе тестирования. Серверный кластер нашего основного сайта, называемый traceback-logger отправить страницу несколько k раз в секунду. И это было слишком путь для небольшого сервера, на котором размещался регистратор traceback (это уже был старый сервер, который использовался только для целей разработки).

В это время CouchDB был довольно популярен, и поэтому я решил опробовать его и написать с ним небольшой traceback-logger. Новый журнал состоял только из одного файла python, который предоставлял перечислять ошибок с параметрами сортировки и фильтрации и страницу отправки. И на заднем плане я начал процесс CouchDB. Новое программное обеспечение очень быстро отреагировало на все запросы, и мы смогли просмотреть огромное количество автоматических отчетов об ошибках.

Интересно то, что ранее решение работало на старом выделенном сервере, где новый сайт на базе CouchDB, с другой стороны, работал только на общем экземпляре xen с очень ограниченными ресурсами. И я даже не использовал силу магазинов ключевых ценностей для горизонтального масштабирования. Способность CouchDB/Erlang OTP обрабатывать параллельные запросы без блокировки уже была достаточной для удовлетворения потребностей.

Теперь быстро написанный журнал CouchDB-traceback все еще работает и является полезным способом изучения ошибок на основном веб-сайте. В любом случае, примерно раз в месяц база данных становится слишком большой, и процесс CouchDB погибает. Но затем, команда compact-db CouchDB уменьшает размер с нескольких ГБ до некоторых КБ снова, и база данных работает снова (может быть, я должен рассмотреть возможность добавления cronjob там... 0o).

Таким образом, CouchDB, безусловно, был лучшим выбором (или, по крайней мере, лучшим выбором, чем MySQL) для этого подпроекта, и он хорошо выполняет свою работу.

-121--622695-

Если используется python 2,7 +, см. раздел коллекции.OrderedDict .
В противном случае выполните команду backport (скопируйте источник) или см. Recipe 576693: Ordered Dictionary for Py2.4 (Python) .

Но если вам действительно нужно расширить dict , то начните с UserDict , источник которого можно найти в /lib/UserDict.py вашего питона.

-121--1649046-

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

SERVICE1 client = new SERVICE1 ()

client.CommonLibrary.Address...

SERVICE2 client2 = новый SERVICE2 ()

client2.CommonLibrary.Address....

0
ответ дан 30 November 2019 в 05:11
поделиться

Это зависит от того, какие инструменты они используют на стороне клиента. Например, с Axis2 для Java инструмент wsdl2java может совместно использовать типы с помощью ключа -u.

как я могу совместно использовать прокси-объекты между несколькими клиентами веб-служб Axis2?

0
ответ дан 30 November 2019 в 05:11
поделиться

Хорошая статья, описывающая, как решить эту проблему. Совместное использование контрактов данных между службами WCF

11
ответ дан 30 November 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: