Что такое привязка WCF по умолчанию?
Я несколько дней боролся с этой проблемой, изучая множество вещей в привязках в процессе.
Одна вещь меня озадачивает: различные ссылки (см. this или что, например) явно указывают: "По умолчанию проект WCF создается с использованием WsHttpBinding", но это не то, что я вижу.
Это то, что я делаю:
- Откройте Visual Studio 2010 и выберите "Новое приложение Project/Visual С#/WCF Service Application"
- Не трогайте ничего внутри кода, устанавливайте локальный адрес IIS для службы (скажем http://localhost/WcfService7)
- Откройте soapUI и выберите File/New Soap UI Project/введите url вновь созданного wsdl: http://localhost/WcfService7/Service1.svc?wsdl, не трогая никакие другой вариант
- Свойства интерфейса: SOAP Version = SOAP 1.1, Binding = "BasicHttpBinding_IService1" (хотя это просто имя, это чертовски намек)
- Откройте Altova XmlSpy и выберите SOAP/Создать новый SOAP-запрос/введите URL-адрес wsdl/выберите любую операцию
- SOAP/Изменение параметров запроса SOAP/Убедитесь, что "Отправить как SOAP + XML (SOAP 1.2)" отмечен
-
SOAP/Отправить запрос на сервер: я получаю ошибки
Ошибка HTTP: не удалось загрузить файл POST '/WcfService7/Service1.svc на сервере localhost (415)
Ошибка отправки данных мыла в http://localhost/WcfService7/Service1.svc Ошибка HTTP: не удалось загрузить файл POST '/WcfService7/Service1.svc на сервере 10.51.0.108 (415)
Любые объяснения? Благодаря
Ответы
Ответ 1
При размещении службы WCF в IIS (с использованием шаблона проекта приложения WCF) с файлом по умолчанию .svc(без изменения его служебного хоста factory) привязка по умолчанию basicHttpBinding
. Если вы хотите изменить привязку по умолчанию к wsHttpBinding
, вы должны использовать:
<protocolMapping>
<add scheme="http" binding="wsHttpBinding"/>
</protocolMapping>
В вашем конфигурационном файле службы, но он не решит вашу проблему, потому что вам не нужен wsHttpBinding
, и, как я помню, Altova XmlSpy не может отправить действительный запрос для wsHttpBinding
, потому что он поддерживает только базовый стек SOAP без WS - * протоколы.
Ответ 2
По умолчанию используется basichttpbinding с использованием SOAP 1.1.
Вот почему вы получаете сообщение об ошибке как SOAP 1.2.