Два сервиса WCF с различными контрактами, но теми же бизнес-объектами

У меня была такая же проблема, мои фрагменты были страницами ViewPager. Причина, по которой это происходило, заключается в том, что при создании экземпляра FragmentPagerAdapter я использовал дочерний диспетчер фрагментов, а не диспетчер фрагментов поддержки активности.

6
задан marc_s 23 June 2009 в 15:34
поделиться

4 ответа

Это семантическая проблема. Если вы хотите определить один UserService.Customer и DeviceService.Customer как семантически равные, то вам следует физически преобразовать этот контракт данных в отдельную сборку. В качестве альтернативы, если вы хотите определить UserService.Customer и DeviceService.Customer как семантически разные, тогда сохраните их как отдельные типы и напишите служебную функцию для перевода из одного в другой.

0
ответ дан 17 December 2019 в 04:51
поделиться

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

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

3
ответ дан 17 December 2019 в 04:51
поделиться

Я подумал, что попытаюсь ответить на свой вопрос, подробно описав, как я пришел к этому решению. Он основан на статье Дэна Майнека в блоге

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

Вместо этого я представил одну службу, которая реализовала несколько DataContracts, например

public partial class DeviceService : IDeviceService, IUserService
{
}

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

Последней частью реализации было объявление двух конечных точек в определении службы, например,

<service behaviorConfiguration="GPSCloudHost.DeviceServiceBehavior" name="BusinessService.DeviceService">
<endpoint address="Device" binding="wsHttpBinding"   contract="BusinessService.DataContracts.IDeviceService"></endpoint>
    <endpoint address="User" binding="wsHttpBinding"   contract="BusinessService.DataContracts.IUserService"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

Я недостаточно опытен в WCF, чтобы сказать, «правильно ли» решение или нет, но это работает для моих требований. Если у кого-нибудь есть лучшее решение, я бы хотел его услышать!

Приветствую

0
ответ дан 17 December 2019 в 04:51
поделиться

Один из вариантов - использовать AutoMapper на клиенте для плавного преобразования из одного типа в другой. Поскольку у них одинаковые свойства, сопоставления не сложны.

2
ответ дан 17 December 2019 в 04:51
поделиться
Другие вопросы по тегам:

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