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

У меня есть тестовая служба WCF и тестовый клиент в том же решении. Служба настроена на запуск на localhost (Ie, http://localhost:8731/Design_Time_Addresses/MyService/Service") Я запускаю клиентское приложение, и оно правильно вызывает службу и получает верните правильный ответ. Я проверил через журналы, что он определенно запускает службу, которая является локальной для моей машины. Тем не менее, я не могу отлаживать службу при запуске клиента. Предполагается, что WCF позволит просто пройти, но никакие точки останова на службе не пострадают, и вмешательство в вызов службы также не работает. Кто-нибудь когда-либо видел это?

Я проверил все очевидные вещи вроде "это файл PDB, который создается?" -- да. Если я запускаю проект службы сам по себе, а затем ударяю его каким-то тестовым клиентом, контрольные точки попадают правильно. Таким образом, отладка службы работает. Я даже могу явно "подключиться к удаленному процессу" и отлаживать службу таким образом. Но WCF автоматически не переходит от клиента к сервису.

Ответы

Ответ 1

У меня тоже было такое. Любопытно, что это происходит после внесения изменений в конфигурацию сборки (от x64 до x86). Вот как я смог это исправить:

  • Щелкните правой кнопкой мыши решение, выберите "Свойства".
  • В разделе "Startup Project" выберите "Единый проект запуска" на "Несколько проектов запуска".
  • Задайте действие "Пуск" для проекта WCF.

Несмотря на то, что я размещаю проект на локальном сервере IIS (а не на VS Development Server), это решает его, что немного озадачивает. Я подозреваю, что установка проекта на "Пуск" также приводит к подключению VS к процессу для отладки.

http://msdn.microsoft.com/en-us/library/bb157685.aspx

Ответ 2

Используете ли вы функцию автоматического хостинга WCF в Visual Studio? Вы можете проверить это, открыв свойства проекта вашего проекта службы WCF и перейдя на вкладку "Параметры WCF". Является ли Start WCF Service Host включенным при отладке другого проекта в том же решении? Если это так, то это объясняет проблему.

Что происходит, когда при запуске вашего клиента создается отдельный процесс для автоматического размещения вашей службы WCF. Поскольку это отдельный процесс, вы не сможете "вступить" в него при отладке своего клиента. Вам нужно будет запустить два отдельных сеанса отладки, один для вашей службы и один для вашего клиента.

Простым способом сделать это - позвонить в System.Diagnostics.Debugger.Break() в логике запуска для вашей службы. Когда ваш сервис автоматически запускается хостом службы WCF, вам будет предложено его отладить, что позволит вам открыть второй экземпляр Visual Studio для его сеанса отладки.

Ответ 3

Для многоконфигурации Visual Studio:

На страницах свойств вашего решения убедитесь, что для "веб-службы" настроена "Конфигурация", а не "Отпустить".

Ответ 4

Также, когда вы используете VS debug и присоединяете его к процессу w3wp.exe, и у вас есть особые привязки портов, кроме http: 80: *, вы должны иметь отладочную сеть в VS, установленную на сайте, и порт http запущен.

Ответ 5

Еще одна причина не входить в службу WCF - это размер ваших данных, передаваемых методам WCF.

Например, я передавал массив dobules размером 1000, и я получал ошибку с плохим запросом (400), видя, как выполняется этот метод. Я сделал размер 500, и теперь он отлаживает WCF.

Ответ 6

У меня была аналогичная проблема. WCF, размещаемый WCF Service Host, запросы, проверенные клиентом тестирования WCF. Моя проблема вызвана пространством в имени конфигурации сборки. Как только я использовал имя конфигурации без пробелов, работала debbuging.

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

Ответ 7

@msulis - да, спасибо, это исправило это для меня. В последнее время я также изменил целевой процессор с любого на x86. Я не мог ответить прямо на ваше сообщение по какой-то причине, поэтому извиняюсь, если это появляется как "ответ".

Ответ 8

Да, у меня такая же проблема, WCF использует другие процессы.

Наконец, я нашел способ, сначала запустил новый экземпляр (debug- > start new instance) службы WCF, затем запустил клиентскую сторону, точки останова в сервисах WCF попали!