Правильный способ создания ссылок на службы WCF?

StackOverflow https://stackoverflow.com/questions/1044045

  •  20-08-2019
  •  | 
  •  

Вопрос

У меня есть самостоятельная служба WCF на основе TCP.Сейчас я создаю проект, который использует этот сервис, но, похоже, существует как минимум два способа добавления ссылки на сервис в проект, и оба создают совершенно разные прокси.Сначала я использовал «Добавить ссылку на службу» из меню проекта, но это сгенерировало довольно много файлов и даже несколько XML-схем основных типов .Net.Затем я попробовал SvcUtil, который создал только два файла: один прокси и один файл конфигурации, содержащий ссылку на службу и параметры привязки, это намного лучше, но...

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

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

Это было полезно?

Решение

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

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

http://perseus.franklins.net/dnrtvplayer/player.aspx ? ShowNum = 0103

Другие советы

Да, в вашем конкретном случае это может показаться дублированием, но учтите следующее:WCF также спроектирован с учетом совместимости, и в БОЛЬШИНСТВЕ сценариев, особенно если у вас есть клиент, отличный от .NET, вызывающий ваш код, у вас не будет сборки с контрактом и доступными интерфейсами.

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

Теперь, если вы действительно хотите избежать дублирования контрактов данных и т. д., вы можете скомпилировать их в отдельную сборку, а затем использовать переключатель /r:(имя сборки) при вызове svcutil, чтобы указать ему повторно использовать код и контракты в эта сборка.

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top