Служба IIS для WCF возвращает HTTP 400 Bad Request
Я искал часы, но я не мог найти решение. Я кратко объясню.
Я изучаю службы WCF. Я только что создал сервис и просмотрю его. Вот файл конфигурации:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="EmployeeServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="EmployeeServiceBehaviour" name="EmployeeConfiguration">
<endpoint address="http://localhost:2005/EmployeeService.svc" binding="basicHttpBinding"
bindingConfiguration="" contract="IEmployeeConfiguration" />
</service>
</services>
</system.serviceModel>
<system.web>
<compilation debug="true"/>
</system.web>
<system.webServer>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
При просмотре с Visual Studio проблем нет. Он отлично работает.
![enter image description here]()
![enter image description here]()
Во-вторых, я пытаюсь опубликовать его в IIS. Что я делаю, так это:
Я публикую службу в папке и добавлю эту службу в IIS.
![enter image description here]()
Я выбираю порт 3006 в качестве порта.
Ниже его файла конфигурации. Обратите внимание, что я также изменил порт внутри config на 3006
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="EmployeeServiceBehaviour">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="EmployeeServiceBehaviour" name="EmployeeConfiguration">
<endpoint address="http://localhost:3006/EmployeeService.svc" binding="basicHttpBinding"
bindingConfiguration="" contract="IEmployeeConfiguration" />
</service>
</services>
</system.serviceModel>
<system.web>
<compilation/>
</system.web>
<system.webServer>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
И я жду, чтобы работать плавно, но:
![enter image description here]()
![enter image description here]()
IIS дает мне пустую страницу из Chrome
![enter image description here]()
И HTTP 400 Bad Request от Explorer
![enter image description here]()
Наконец, если я удаляю адресную часть из файла конфигурации, все работает хорошо. Но другая путаница в том, что на моем другом компьютере после описанного выше сценария (адрес предоставлен) я могу связаться с сервисом. Итак, я действительно устал от поиска, почему это работает на одном компьютере и не работает над другим. Может кто-нибудь объяснить это мне?
Я знаю, что это немного дольше, но я должен объяснить это ясно.
Благодаря
Ответы
Ответ 1
Согласно моим запросам, я не должен указывать адрес.
msdn.microsoft.com/en-us/library/aa751792(v=vs.110).aspx
Вы всегда должны использовать относительные адреса конечных точек для службы, поддерживающей IIS конечные точки. Поставка полностью квалифицированного адреса конечной точки (например, localhost/MyService.svc) может привести к ошибкам в развертывании если адрес конечной точки не указывает на приложение IIS который размещает службу, отображающую конечную точку. Использование относительной конечной точки адреса для размещенных служб позволяют избежать этих потенциальных конфликтов.
Ответ 2
Я думаю, что это решит вашу проблему:
Добавьте эту конечную точку в свою службу:
<endpoint address="mex" binding="mexHttpBinding"
bindingConfiguration="" contract="IMetadataExchange" />
И измените атрибут name
service
на полное имя вашего служебного класса:
<service behaviorConfiguration="EmployeeServiceBehaviour"
name="Namespace.EmployeeConfigurationClass">
Надеюсь, что этого достаточно
Ответ 3
Это может помочь. ive просто потратил более 2 часов, пытаясь заставить это работать. Я использую FF и его набор как браузер по умолчанию.
в FF он добавлял/в конец моего URL
http://services.tester.dev/VehicleFeedService.svc/
который возвратил NetworkError: 400 Bad Request
однако в IE или chrome он не помещает/в конец, и он отлично работает.
одно замечание.. даже в FF, который давал мне 400 плохих запросов, ?wdsl
действительно работал
http://services.tester.dev/VehicleFeedService.svc?wsdl
похоже, что проблема/вызывала проблему