Подтвердить что ты не робот

Как отлаживать программы WCF

В моем коде используется много вызовов WCF, и когда я пытаюсь его отладить, он не переходит к самому служебному коду. Есть ли способ отладки кода WCF каким-то образом?

4b9b3361

Ответ 1

Вам нужно приложить отладчик к процессу, в котором работает ваша служба wcf.

Если в iis вам нужно подключиться к соответствующему процессу w3p.exe.

Если в автономном приложении или службе Windows присоединяется к имени вашего exe.

В Visual Studio в меню отладчика есть "attach to process". Откройте соответствующий код, установите точку останова и вызовите службу, вызывающую выполнение этого кода.

Вне отладки, использование трассировки .net с переключаемыми уровнями - хороший способ получить представление о том, что происходит. Обычно я устанавливаю sys internals debugview на цветные выделения ошибок и предупреждений и постоянно запускаю его во время запуска кода или тестов. Цветные линии из моего периферийного зрения во время работы обнаруживают проблемы.

Ответ 2

Там намного проще. Просто запустите несколько процессов в Visual Studio. Щелкните правой кнопкой мыши Решение. Нажмите "Свойства". Выберите "Запуск проекта". Нажмите "Несколько проектов запуска". Задайте WCF и клиентским проектам Action = Start. Теперь вы пройдете через WCF, а также клиент.

Ответ 3

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

1) Используйте fiddler для просмотра трафика WCF.

2) Используйте прослушиватель трассировки WCF для мониторинга фактических вызовов WCF. Это очень полезно при попытке определить причины сбоя сериализации. Вы можете включить это, добавив следующий блок в свой блок конфигурации web.config:

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData="c:\log\WebTrace.svclog"  />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

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

Ответ 4

Чтобы отладить службу WCF в visual studio 2010, перейдите в Debug → Attach to Process. Проверьте "Показывать процессы от всех пользователей" и выберите w3p.exe, если вы используете IIS или имя приложения, если нет. Поместите в точку останова, выполните вызов, а затем вы можете начать отладку.

Если это веб-приложение (я бы рекомендовал это), вы можете щелкнуть правой кнопкой мыши по проекту, перейдите на вкладку "Веб" и в разделе "Действие" выберите "Не открывайте страницу, дождитесь запроса из внешнего приложения". Сохраните и закройте эту настройку, затем просто нажмите F5, чтобы начать отладку.

Ответ 5

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

Ответ 6

При запуске приложения, которое обращается к службам WCF, часто задействованы два процесса

  • Клиентский процесс, который обращается к службе WCF
  • Серверный процесс, на котором размещается служба WCF

Похоже, вы отлаживаете процесс клиента. Чтобы выполнить фактический код службы WCF, вам необходимо прикрепить отладчик Visual Studio к процессу, в котором размещена служба, и установить точку останова в коде.

Примечание. Visual Studio может подключаться к нескольким процессам одновременно, чтобы вы могли отлаживать код клиента и сервера в том же сеансе. Используйте

  • Инструменты → Присоединить к процессу

Ответ 7

В моем случае я установил WCF-сайт как StartUp Project в Visual Studio и напрямую запустил WCF в режиме отладки,

элемент WCF в проводнике решений Visual Studio похож:

введите описание изображения здесь

после запуска WCF в браузере появится новое представление веб-страницы, и его URL-адрес понравится http://xxxx:xxport/Service.svc, скопируйте этот uri и используйте его в другой программе, которая вызывает этот WCF,

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