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

Не удалось отладить сообщение службы WCF

У меня есть решение Visual Studio 2008 с WCF-сервисом и клиентом.

Когда я запускаю свой клиент и вызываю метод из своей службы, я получаю сообщение "Невозможно автоматически отладить" Home.Service ". Удаленная процедура не может быть отлажена. Обычно это означает, что отладка не была включена сервер."

Я googled вокруг, и попробовал следующее.

<system.web>
   <compilation debug="true" />
</system.web>

был добавлен в app.config как для клиента, так и для сервера.

Я также убедился, что проект компилируется в режиме отладки.

Что еще может вызвать это сообщение?

Изменить: добавлено больше информации на основе отзывов.

  • Использует wsHttpBinding
  • Я установил

    <serviceDebug includeExceptionDetailInFaults="true"/>
    
  • Я использую

    var service = new HomeReference.HomeServiceClient();
    service.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
    

К сожалению, ошибка появляется при первом вызове метода в моей службе. Я могу отклонить сообщение, и приложение продолжает работать. Любые Исключения, брошенные на сервер, которые не распространяются обратно на клиента, хотя (я предполагаю, что это должно быть?)

4b9b3361

Ответ 1

В моем случае проблема оказалась несоответствием между настройками безопасности на клиенте и сервере. Я использовал пользовательское связывание, подобное этому:

<customBinding>
    <binding name="AuthorisedBinaryHttpsBinding" receiveTimeout="00:03:00" sendTimeout="00:03:00">
      <!-- this next element caused the problem: -->
      <security authenticationMode="UserNameOverTransport">
      </security>
      <binaryMessageEncoding>
        <readerQuotas maxDepth="100" maxStringContentLength="1000000"
          maxArrayLength="655360000" />
      </binaryMessageEncoding>
      <httpsTransport />
    </binding>
  </customBinding>

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

Чтобы решить проблему, я впервые включил трассировку WCF. Это показало мне, что WCF выбрасывает MessageSecurityException:

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

Это заставило меня посмотреть настройки Binding на стороне клиента. Оказалось, что я не добавил необходимый элемент безопасности в свою собственную привязку. Поскольку я делал это с помощью кода, мне понадобилось следующее (обратите внимание на третью строку):

  var binding = new CustomBinding(
      binaryEncoding,
      SecurityBindingElement.CreateUserNameOverTransportBindingElement(),
      new HttpsTransportBindingElement { MaxReceivedMessageSize = MaxMessageSize, });

Что касается того, почему Visual Studio показывала эту ошибку, я понятия не имею - выглядит для меня ошибкой.

Ответ 2

Я боролся с такой же ошибкой в ​​течение часа и ниже, и вот, я перезапустил VS2008, и он волшебным образом зафиксировал себя. Попробуйте, поскольку это может сэкономить вам некоторое время.

Ответ 3

Автоматическое подключение к службе имеет следующие ограничения:

  • Служба должна быть частью решения Visual Studio, которое вы отлаживаете.

  • Служба должна быть размещена. Он может быть частью проекта веб-сайта (файловая система и HTTP), проекта веб-приложений (файловая система и HTTP) или проекта библиотеки WCF. Проекты Библиотеки служб WCF могут быть либо библиотеками служб, либо библиотеками служб Workflow.

  • Служба должна быть вызвана клиентом WCF.

  • Отладка должна быть включена с помощью следующего кода в файле app.config или Web.config:

    <system.web>
      <compilation debug="true" />
    </system.web>
    

См. Ограничения отладки WCF

Кроме того, если оба проекта (клиент и услуга) находятся в одном решении, но будут выполняться в разных процессах (например, если вы используете локальный сервер IIS для разработки и запускаете свое веб-приложение на пул приложений, чем тот, который он использует), вам может потребоваться включить " Несколько проектов запуска" для решения (в Свойствах решения → Проект запуска), чтобы отладчик мог подключаться к обоим,

Чтобы окно браузера службы отображалось каждый раз при отладке, вы можете установить "Запустить действие" (в свойствах проекта проекта) "Не открывать страницу. Подождите запроса из внешнего приложения".

Это из личного опыта и может помочь другим.

Ответ 4

Другая причина, по которой вы можете увидеть эту ошибку (и я считаю, что это относится ко мне), - это если вы работаете в 64-битной Windows. Видимо, Visual Studio не поддерживает x64-отладчик.

Вы можете обойти это, изменив Target Platform для приложения-потребителя:

Свойства проекта → Сборка → Изменить "Платформа цели" на "x86".

К сожалению, это не сработает для меня, поскольку я пытаюсь запустить в Windows Azure Development AppFabric, который, кажется, требует, чтобы все работало в 64-битном режиме!

Ответ 5

У меня тоже такая же проблема. Я изменил файлы конфигурации клиента и службы, например

Отладка компиляции установлена ​​в значение true.

Это сработало для меня.

Ответ 6

Вы пробовали

    <serviceBehaviors>

  <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
        </serviceBehaviors>

В целях отладки?

Редактировать: неважно, думаю, я неправильно понял вопрос

Ответ 7

У меня была аналогичная проблема, и, похоже, из-за того, что аутентификация Windows не была включена на сайте/виртуальном каталоге IIS.

Вы пытались настроить режим аутентификации на "Интегрированный" вместо "Аноним"? http://msdn.microsoft.com/en-us/library/x8a5axew(VS.80).aspx

Ответ 8

В веб-сервисе web.config убедитесь, что для отладки компиляции установлено значение true. Это должно решить вашу проблему!

Ответ 9

В моем случае проблема оказалась совсем другой. Я изменил название операции в веб-сервисе и забыл обновить клиент. По какой-то причине это привело к ошибке "Не удалось автоматически отладить...".

Ответ 10

Также может быть, что один и тот же номер порта используется в IISExpress и IIS. Если вы разрабатываете приложение WCF в Visual Studio и IISExpress, а затем устанавливаете одно и то же приложение на своем локальном IIS, не забудьте использовать тот же номер порта в IIS и IISExpress. Использование того же номера порта приведет к появлению этого сообщения об ошибке.

Ответ 11

У меня была та же проблема в Visual Studio 2017. После удаления скрытой папки .vs в корне папки решения я смог снова выполнить отладку.

Ответ 12

Добавьте эту строку кода после создания ссылки на службу в своем клиенте.

MyWCFService.IService _proxy = new MyWCFService.IService();
_proxy.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;