Минимальная конфигурация для работы «Добавить ссылку на службу> Обнаружение» - PullRequest
3 голосов
/ 19 декабря 2011

У меня уже есть несколько протестированных и корректно работающих служб WCF + Windows, которые работают как службы Windows на удаленных компьютерах разработчиков. За исключением одного.

Для отладки я попытался разместить WCF (без службы Windows), используя встроенную «Добавить ссылку на службу», а затем разместить ее в Visual Studio (не знаю, как называется хост).

В любом случае, я не могу получить ссылку «Добавить сервис», чтобы узнать о моих услугах.

Поскольку я пользуюсь Сервисами Windoes, я использую TCP. Вот некоторые вещи, которые я сделал, все в приложении winforms, к которому я добавляю сервисную ссылку :

Добавить проект> Свойства> Отладка> Аргументы командной строки: /client:"WcfTestClient.exe ", но исполняемый файл не запускается.

И мой App.Config

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint address="net.tcp://localhost:32279/SYNC" binding="netTcpBinding"
        bindingConfiguration="tcpSyncBindingConfig" contract="Company.Data.Sync.ILocalCacheSyncContract"
        name="tcpSyncClientEP" />
    </client>
    <bindings>
      <netTcpBinding>
        <binding name="tcpSyncBindingConfig" maxReceivedMessageSize="6553600" />
      </netTcpBinding>
      <mexTcpBinding>
        <binding name="tcpMexBindingConfig" />
      </mexTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="svcBehavior" name="Company.Data.Sync.Services.LocalCacheSyncService">
        <endpoint address="net.tcp://localhost:32279/Sync" binding="netTcpBinding"
          bindingConfiguration="tcpSyncBindingConfig" name="tcpSyncListenEP"
          contract="Company.Data.Sync.Services.ILocalCacheSyncContract" />
        <endpoint address="net.tcp://localhost:32279/Sync/mex" binding="mexTcpBinding"
          bindingConfiguration="tcpMexBindingConfig" name="tcpMexEP" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="svcBehavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Примечание : ServiceOperation возвращает Microsoft.Synchronization.Data.xxx, например SyncContext. Возможно, мне придется добавить ссылку в Winforms? Или «Добавить справочник услуг» добавит их для меня? Служба и контракты генерируются шаблоном локального кэша базы данных. возможно, не относится к проблеме.

Ответы [ 2 ]

4 голосов
/ 19 декабря 2011

После публикации я продолжал искать ответы, и вот что я экспериментировал, чтобы работать:

Сам файл проекта, например * .csproj для C # проекта должен содержать ProjectTypeGuid для WCF для Visual Studio, чтобы даже начать проверку проекта для служб.

<ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Дополнительные GUID можно найти на http://www.mztools.com/articles/2008/mz2008017.aspx. (Спасибо, mztools!)

Проект WCF может иметь несколько сервисов, и для каждого из них должен быть определен их конфигурационный файл в App.Config проекта. У каждой службы должен быть свой мекс-адрес конечной точки. Службы также могут использовать одно поведение службы, для которого определено расширение serviceMetadata. Конечная точка Mex не требует поведения или конфигурации привязки. Но не забудьте установить для контракта конечной точки mex значение IMetadataExhchange.

Для TCP mex для serviceMetadata> HttpGetEnabled должно быть установлено значение false.

Я считаю, что это минимальные настройки.

0 голосов
/ 19 декабря 2011

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

.

Затем перейдите в другое приложение (я полагаю, то же решение) и скопируйте URL-адрес, на котором оно выполняется.

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

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

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