Генерация клиентского прокси из службы Windows

Я пытаюсь создать клиентский прокси из библиотеки службы WCF. Я использую VS2005, .NET 3.0 на рабочей станции Windows XP Pro. Служба WCF размещается в службе Windows. Когда я запускаю службу Windows как консольное приложение, проблем нет. Я могу запустить svcutil.exe по этому адресу, и он сгенерирует прокси. Однако, когда я компилирую эту службу в режиме выпуска и устанавливаю ее на рабочую станцию ​​с помощью InstallUtil, я получаю сообщение об ошибке «Ошибка: не удается получить метаданные из net.tcp://localhost:9090/Service2». Это настройки, которые я использую в app.config для службы.

<behaviors>
  <endpointBehaviors>
    <behavior name="Test2">
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="serviceBehaviour">
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceMetadata />
      <!--<serviceMetadata httpGetEnabled="true" />-->
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>


<bindings>
  <customBinding>
    <binding name="TestBinding2" inactivityTimeout = "00:30:00"  openTimeout="00:30:00"
         receiveTimeout="00:30:00"
         sendTimeout="00:30:00">
      <binaryMessageEncoding />
      <tcpTransport transferMode="StreamedResponse" />

    </binding>
  </customBinding>
</bindings>


person klone    schedule 28.03.2009    source источник
comment
Не могли бы вы опубликовать весь раздел system.serviceModel вашей конфигурации и, возможно, код, который вы используете для запуска службы Windows?   -  person Andy White    schedule 28.03.2009
comment
‹system.serviceModel› ‹services› ‹service behaviorConfiguration=serviceBehaviour name=WCFServiceLibrary3.service2› ‹host› ‹baseAddresses› ‹add baseAddress=net.tcp://localhost:9090/Service_2 /› ‹/baseAddresses› ‹/host›   -  person klone    schedule 28.03.2009
comment
‹привязка конечной точки=mexTcpBinding name=TCP_Mex Contract=IMetadataExchange /› ‹endpoint address=mex binding=customBinding bindingConfiguration=TestBinding2 name=TestBinding2 Contract=WCFServiceLibrary3.IService2 behaviorConfiguration=Test2 /›   -  person klone    schedule 28.03.2009


Ответы (1)


Пара кадров в темноте...

Ваша служба Windows работает? Кроме того, работает ли ваша служба WCF в службе Windows? В моем проекте также размещена служба WCF в службе Windows (вы можете увидеть общие пошаговые инструкции здесь). Несмотря на то, что служба Windows помечена для автоматического запуска, мне все равно приходится запускать ее вручную в первый раз. Возможно, есть параметр командной строки InstallUtil.exe, о котором я не знаю, который сделает это за меня. Но дело в том, что если ваша служба Windows или служба WCF внутри не запущена, вы, очевидно, не видите конечную точку MEX.

Другое дело, что я заметил. Ваша ошибка говорит о том, что метаданные не могут быть получены из net.tcp://localhost:9090/Service2, но базовый адрес, который вы указали в своем комментарии, показывает net.tcp://localhost:9090/Service_2. Возможно, это просто тип-о, но не мешало бы перепроверить, все ли написано правильно, особенно если add.config сгенерирован вручную.

person Matt Davis    schedule 29.03.2009