Ошибки WCF при использовании WCFTestClient для тестирования простой веб-службы WCF

Когда я пытаюсь протестировать AutoLotWCFService с помощью "wcftestclient", я получаю следующую ошибку. Что я делаю неправильно? Любое понимание поможет. Это простой веб-сервис, имеющий wshttpbinding с интерфейсом контракта и реализацией в сервисе. Вот длинное сообщение об ошибке: Файл Web.Config имеет 2 конечные точки - одну для самой веб-службы и другую для metaDataExchange. Все это в значительной степени по умолчанию. Я могу включить код при необходимости - кажется, я не могу прикрепить файлы здесь.


Error: Cannot obtain Metadata from http://localhost/AutoLotWCFService/Service.svc
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address.  
For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error
    URI: http://localhost/AutoLotWCFService/Service.svc
    Metadata contains a reference that cannot be resolved: 'http://localhost/AutoLotWCFService/Service.svc'.
    The remote server returned an unexpected response: (405) Method not allowed.
    The remote server returned an error: (405) Method Not Allowed.
    HTTP GET Error    URI: http://localhost/AutoLotWCFService/Service.svc
    The document at the url http://localhost/AutoLotWCFService/Service.svc was not recognized as a known document type.The error message from each known type may help you fix the problem:
    - Report from 'DISCO Document' is 'Name cannot begin with the '%' character, hexadecimal value 0x25. Line 1, position 2.'.
    - Report from 'WSDL Document' is 'There is an error in XML document (1, 2).' -Name cannot begin with the '%' character, hexadecimal value 0x25. Line 1, position 2.
    - Report from 'XML Schema' is 'Name cannot begin with the '%' character, hexadecimal value 0x25. Line 1, position 2.'.

5 ответов

У меня недавно была эта проблема, когда я пытался разместить WCF на своем ноутбуке с Windows Vista под IIS7.

Сначала я получил следующую ошибку: "Ошибка HTTP 404.3 - не найден", и одним из предложенных решений было "Убедитесь, что ожидаемый обработчик для текущей страницы сопоставлен".

Поэтому я добавил обработчик для файла.svc вручную и определил его как DiscoveryRequestHandler, полагая, что это может помочь. Это вызвало проблему, которую вы описали выше.

Фактическим решением было удалить обработчик, который я добавил, и выполнить следующие команды:

CD c:\windows\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\
ServiceModelReg -i

Это решило мою проблему, и сервис работает нормально. Надеюсь, это поможет пролить свет на вашу проблему. Я не могу быть уверен, но это, вероятно, из-за порядка, в котором я установил различные пакеты на моем ноутбуке разработчика.

Если установка compenonts не работает, попробуйте восстановить, она удаляется, а затем устанавливается.

"%WINDIR%\Microsoft.Net\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -r

Попробуйте проверить, соответствует ли service(name) в Service Markup (правой кнопкой мыши на servicename.svc) службе (name) в вашем файле web.config.

Ура!

Спасибо; Верьте или нет, проблема по крайней мере загрузки службы через wcftestclient была решена, когда я перерегистрировал ASPNET в IIS с помощью aspnet-regiis.

Следующая проблема - иметь возможность вызывать методы, предоставляемые службой, через wcftestclient. С какими проблемами безопасности мне приходится сталкиваться? Я должен был включить анонимный вход с Windows Auth. и все же вызов вызывает сгенерированные исключения, которые указывают на что-то, связанное с нарушением доступа. При поиске некоторые вещи указывают на установку сертификатов, чтобы можно было вызывать их. Просветите, если возможно.

Вам нужно убедиться, что конфигурация поведения службы включает тег метаданных с httpGetEnabled="true"

<serviceBehaviors>
  <behavior name="serviceBehavior">
    <serviceMetadata httpGetEnabled="true">
  </behavior>
</serviceBehaviors>

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


<service name="blah" behaviorConfiguration="serviceBehavior">
Другие вопросы по тегам