Дублирование определения класса в прокси-классах WCF клиента .NET для веб-службы Java - PullRequest
0 голосов
/ 15 сентября 2011

Я работаю над клиентом .NET WCF для веб-службы Java.Я могу успешно сгенерировать прокси-классы .NET из WSDL веб-службы Java и вызвать сервис через прокси-класс.Одной из проблем является дублирование классов в прокси-классах.Скажем, у нас есть два веб-сервиса java: java_a и java_b , оба ссылаются на класс common_class .

Теперь, если я сгенерирую два прокси-сервера .NETклассы для двух веб-сервисов Java на клиенте, скажем: proxy_a и proxy_b .Теперь в обоих прокси-классах есть класс с именем common_class , один - proxy_a.common_class , а другой - proxy_b.common_class .Я хочу написать некоторый вспомогательный класс для двух прокси-классов на стороне клиента, но сложно иметь дело с common_class.Я должен написать много дублирующего кода, чтобы манипулировать двумя общими классами, что, по моему мнению, не должно происходить.Должна быть возможность вручную изменить прокси-классы для извлечения common_class, но так как мне придется обновлять прокси-классы очень часто, ручная работа будет очень болезненной.

Поэтому мой вопрос: какизбежать такого дублирования определений классов при создании прокси-классов?

С уважением, - Брюс

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Вы можете решить эту проблему, отредактировав файл .SvcMap вручную.

Создание прокси-классов для первого веб-сервиса ( proxy_a ).

Затем перейдите в Обозреватель решений и убедитесь, что установлен флажок «Показать все файлы».

enter image description here

Теперь откройте файл Reference.svcmap и найдите узел MetadataSources.

Например:

<MetadataSources>
    <MetadataSource Address="http://www.example.com/proxy_a/mex"
     Protocol="mex" SourceId="1" />
</MetadataSources>

Просто добавьте URL для второй службы ( proxy_b ) к этому узлу. Не забудьте увеличить атрибут SourceId.

<MetadataSources>
  <MetadataSource Address="http://www.example.com/proxy_a/mex"
   Protocol="mex" SourceId="1" />
  <MetadataSource Address="http://www.example.com/proxy_b/mex"
   Protocol="mex" SourceId="2" />
</MetadataSources>

Щелкните правой кнопкой мыши ссылку на службу и выберите «Обновить ссылку на службу», чтобы восстановить код на стороне клиента. Теперь, если компания, которая правильно построила сервисы и присвоила им пространства имен, где это необходимо, будет создан только один тип для общего класса, который они совместно используют.

Нужна дополнительная информация? Я написал статью по этому вопросу месяц назад или около того:

http://cgeers.com/2011/07/31/wcf-sharing-types-using-svcmap/

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

0 голосов
/ 15 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...