Не удается получить доступ к метаданным службы WCF (wsdl): ошибка 400

У меня проблема с метаданными WCF при новой установке (IIS 10 на Windows Server 2016)

Ситуация

  • Служба WCF работает нормально (как это было при предыдущей установке)

  • Навигация (через браузер) wsdl больше НЕ возможна или лучше

  • http://ServiceA/ServiceA.svc: да (веб-страница доступна), но ссылка на xml не работает (ошибка 400 от IIS)

  • https://ServiceA/ServiceA.svc: даже не страница

    Более того, в serviceMetadata указано использование https без http, что противоречит только что описанному поведению.

Ниже выдержка из web.config

<services>
      <service behaviorConfiguration="ServiceBehavior" name="...">
        <endpoint address="https://<fqdn>/ServiceA/ServiceA.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="wsHttpEndpointBinding"
                  name="WsHttpBinding"
                  contract="ServiceContracts.IServiceA">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="false" />
    ...

Может ли это быть что-то связанное с разрешением имен? Имя ПК — AAAAAA, полное доменное имя — BBBBB.domain.ext.

Спасибо за любое предложение Л.


person LorenzoGi    schedule 12.01.2021    source источник
comment
Привет, проблема решилась? Если вы считаете, что мой ответ полезен для вас, вы можете отметить его как ответ.   -  person Ding Peng    schedule 20.01.2021
comment
Привет. Извините, я некоторое время не был в сети. Завтра попробую убрать адрес конечной точки, как вы предложили. Я в недоумении, потому что в начале я установил относительный путь (/ServiceA/ServiceA.svc), и svc был доступен, но это была не сама служба. Установив полный URL-адрес, ситуация поменялась местами (нет svc, но сервис в порядке). Я дам Вам знать. А пока спасибо.   -  person LorenzoGi    schedule 22.01.2021


Ответы (1)


Службе WCF, развернутой в IIS, не нужно задавать адрес конечной точки в файле web.config.

Вот моя демонстрация:

<?xml version="1.0"?>
<configuration>

  <appSettings/>
  <connectionStrings/>
  <system.web>
    <compilation debug="true">
    </compilation>
    <!--
        The <authentication> section enables configuration 
        of the security authentication mode used by 
        ASP.NET to identify an incoming user. 
    -->
    <authentication mode="Windows" />
    <!--
        The <customErrors> section enables configuration 
        of what to do if/when an unhandled error occurs 
        during the execution of a request. Specifically, 
        it enables developers to configure html error pages 
        to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
         <error statusCode="403" redirect="NoAccess.htm" />
         <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
      -->
  </system.web>
  <system.webServer>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <system.serviceModel>
    <services>
      <service name="WcfService25.Service1" behaviorConfiguration="WcfService25.Service1Behavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="basicHttpBinding" contract="WcfService25.IService1">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfService25.Service1Behavior">
          <!-- To avoid disclosing metadata information, set the value below to false before deployment -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

Это web.config. Этот проект является шаблонным проектом.

Базовый адрес службы WCF в IIS выглядит следующим образом:

введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения

person Ding Peng    schedule 13.01.2021
comment
Прячется. Спасибо за ответ, сделал как вы посоветовали. До сих пор виртуальная машина работает в бета-версии (доступна через внутреннюю сеть) и работает нормально: и навигация svc, и служба работают. Я сомневаюсь, когда мы приступим к работе, потому что в настоящее время я вижу, что ServiceA.svc разрешается с помощью https://[MACHINE_NAME]/ServiceA/ServiceA.svc (настройка адреса = как вы предложили), поэтому в открытом Интернете я думаю это будет зависеть от того, как мои коллеги по эксплуатации настроят DNS - person LorenzoGi; 22.01.2021
comment
Мы также можем получить к нему доступ по IP-адресу. - person Ding Peng; 22.01.2021
comment
Привет. Я узнаю, когда приступлю к бета-тестированию. Не сразу. Не переживайте, если ваш ответ точно будет верным, я с удовольствием его отмечу. Спасибо - person LorenzoGi; 29.01.2021