Ошибки 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.'.

Ответы

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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


<service name="blah" behaviorConfiguration="serviceBehavior">

Ответ 4

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

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

Ответ 5

Попробуйте проверить, является ли служба (имя) в разделе "Сервисная разметка" (щелкните правой кнопкой мыши на servicename.svc), чтобы она соответствовала службе (имени) в файле web.config.

Ура!