2010-11-08 5 views
3

Наше приложение обращается к службе WCF, которая размещается службой Windows на одном компьютере. Клиентское приложение и служба всегда будут находиться на одном компьютере.Не удается отладить службу wcf-windows

Я создал службу Windows, в которой размещена служба WCF. Чтобы проверить свой код службы Windows, я создал консольное приложение, которое содержит тот же файл app.config и код, что и моя служба Windows. Я запускаю консольное приложение в одном отладочном потоке и запускаю свой клиент в другой поток отладки. Все работает отлично, и я легко могу использовать отладчик.

Сейчас в руб ...

Итак, я создал инсталлятор и установил мою службу Windows. После успешного запуска я успешно добавил ссылку на службу моему клиенту, используя http://localhost/VssService в Visual Studio 2010. Я успешно подключился к службе через «Attach To Process». Я запустил свой клиент в потоке отладки, но когда я пытаюсь войти в удаленный метод, я получаю «Невозможно автоматически перейти на сервер. Отладчик не смог остановить серверный процесс». Это происходит как для [NetNamedPipeBinding_IVssService], так и для [BasicHttpBinding_IVssService]. Я боролся с этим часами и исчерпывал идеи, поэтому надеюсь, что вы можете мне помочь. Я включил файлы app.config для своего приложения Windows Service и Client. Надеюсь, они помогут.

Я ценю Ваше желание прочитать этот вопрос и надеемся, что вы можете помочь бы решить эту проблему ...

Майк

============== ======= SERVICE app.config =============================

<services> 
     <service behaviorConfiguration="VssServiceBehavior" name="ClientSaver.VssService.VssService"> 
      <endpoint address="net.pipe://localhost/VssService/Pipe/" binding="netNamedPipeBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" /> 
      <endpoint address="http://localhost/VssService/" binding="basicHttpBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" /> 
      <endpoint address="http://localhost/VssService/MEX/" binding="mexHttpBinding" 
       bindingConfiguration="" contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="http://localhost/VssService/" /> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="VssServiceBehavior"> 
     <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors>  
</system.serviceModel> 

==================== ====== КЛИЕНТ App.config =============================

  <endpoint address="http://localhost/VssService/" binding="basicHttpBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" />        
     </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="VssServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors>  
</system.serviceModel> 

+0

Видели это? http://social.msdn.microsoft.com/Forums/en-IE/asmxandxml/thread/20b41329-1aed-4892-925e-ce0d5cef70fe – Kangkan

+0

Для обозначения в качестве ответа нажмите на значок, который похож на Tik (знак Nike) в левой руке одного из ответов. –

+0

Просто примечание: вы можете пройти через основную разработку WCF с помощью трассировки и регистрации событий. Проверьте следующую ссылку: http://msdn.microsoft.com/en-us/library/ms733025.aspx. – casals

ответ

0

Вы не можете перешагнуть исполняемым границ. Вам нужно установить точку останова в код сервера (то есть проект). Затем из проекта сервера присоединитесь к запущенному процессу работы Windows (будьте осторожны здесь ... вам нужно, чтобы последний серверный проект работал как служба Windows). Затем, когда вы входите в свое приложение Windows Forms, оно попадает в точку останова сервера.

+1

Вы можете сделать шаг по исполняемым границам в WCF при запуске с помощью хоста VS по умолчанию –

+0

Но, возможно, он пытается войти в службу WCF из одного проекта (проект Windows) в другой проект (проект службы WCF), и они, возможно, не входят в то же решение ... и это было бы проблемой вхождения в ... –

+0

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

0

Вы должны использовать Internet Explorer в качестве браузера по умолчанию для отладки службы ...

+0

Привет всем, Большое спасибо за все ваши идеи. Предложение Иванова о том, чтобы не вмешаться в наш метод в службе Microsoft, но установив в нем точку останова при запуске нашего приложения в другом отладочном потоке. :) – ABOH

0

Посмотрите средства отладки для окон. Здесь есть несколько инструментов, которые полезны для отладки служб Windows.

3

Хорошо. Один из способов, которым я использую, когда отладка VS перестает работать, заключается в размещении System.Diagnostics.Debugger.Break() в удобном месте в служебном коде (скажем, в конструкторе или методе). Это заставляет отладчик JIT запускаться и позволяет мне подключиться к сервису с кодом, сломанным в этот момент, с любым экземпляром VS, который у меня есть.

Очевидно, что вы удаляете его из кода без отладки.

0

Вы пытались вручную загрузить отладочные символы? Однажды это случилось со мной, и это произошло потому, что VS не загружал символы.

Смежные вопросы