Подтвердить что ты не робот

Служба 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

Наконец, если я удаляю адресную часть из файла конфигурации, все работает хорошо. Но другая путаница в том, что на моем другом компьютере после описанного выше сценария (адрес предоставлен) я могу связаться с сервисом. Итак, я действительно устал от поиска, почему это работает на одном компьютере и не работает над другим. Может кто-нибудь объяснить это мне?

Я знаю, что это немного дольше, но я должен объяснить это ясно. Благодаря

4b9b3361

Ответ 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

похоже, что проблема/вызывала проблему