Не удалось отладить сообщение службы 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;
К сожалению, ошибка появляется при первом вызове метода в моей службе. Я могу отклонить сообщение, и приложение продолжает работать. Любые Исключения, брошенные на сервер, которые не распространяются обратно на клиента, хотя (я предполагаю, что это должно быть?)
Ответы
Ответ 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;