WCF не использует имя компьютера вместо имени домена при просмотре MyService.svc? Wsdl

В моем сеансе WCF используется имя компьютера вместо имени домена. Когда я просматриваю ссылку MyService.svc?wsdl, она показывает мое имя компьютера.

Где добавить свое доменное имя в web.config? Адрес конечной точки, базовый адрес или личность?

Примечание. Я использую SSL, поэтому он должен быть https://www.example.com/myservice.svc

Ответ 1

WCF 4.0 решил эту проблему в некоторых случаях с новой конфигурационной опцией, которая использует заголовки запроса:

    <behaviors>
        <serviceBehaviors>
            <behavior name="AutoVaultUploadBehavior">
                <useRequestHeadersForMetadataAddress>
                    <defaultPorts>
                        <add scheme="https" port="443" />
                    </defaultPorts>
                </useRequestHeadersForMetadataAddress>

Ответ 2

Для IIS7 вы не добавляете его в web.config, а в файл конфигурации IIS.

Сначала отредактируйте привязки для своего веб-сайта, чтобы HTTP-протокол указывал имя хоста, если вы еще этого не сделали - это обеспечит правильное имя под HTTP.

Перейдите в папку C:\Windows\System32\inetsrv\config и откройте приложение applicationHost.config

Найдите раздел сайтов. Вы увидите следующее:

<sites>
  <site name="Default Web Site" id="1">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:80:puck" />
      <binding protocol="net.tcp" bindingInformation="808:*" />
      <binding protocol="net.pipe" bindingInformation="*" />
      <binding protocol="net.msmq" bindingInformation="localhost" />
      <binding protocol="msmq.formatname" bindingInformation="localhost" />
      <binding protocol="http" bindingInformation="*:80:puck.idunno.org" />
      <binding protocol="http" bindingInformation="*:80:localhost" />
      <binding protocol="https" bindingInformation="*:443:" />
    </bindings>
  </site>
  ....
</sites>

Вы можете видеть, что привязки для протокола http указывают заголовок узла, но https нет. Когда вы просматриваете веб-страницы, вы не можете использовать заголовки хостов поверх HTTPS, но WCF по-прежнему использует его при создании WSDL - если он не может найти его, он будет возвращаться к имени машины.

Итак, все, что вам нужно сделать, это отредактировать привязку HTTPS таким образом

      <binding protocol="https" bindingInformation="*:443:puck" />

добавление правильного FQDN в конец информации привязки. Reset IIS и WCF должны получить это прямо сейчас.

Решение IIS6 уже опубликовано darin

Ответ 4

Чтобы устранить эту проблему Настройте атрибут httpGetEnabled и атрибут httpsGetEnabled в файле web.config

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />

Ответ 5

Мы используем WCFExtras, чтобы изменить имя хоста.

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

<behaviors>
  <endpointBehaviors>
    <behavior name="xxx">
      <wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" />
    </behavior>
  ...

Ответ 6

просто добавление <useRequestHeadersForMetadataAddress></useRequestHeadersForMetadataAddress> к решению моей проблемы. Похоже, WCF 4.0 заботится о заголовках, добавляя это Я использовал SSL для доступа к службе WCF.

Ответ 10

Хотя это старая публикация, вот ответ. В разделе "Поведение службы" → ServiceMetaData добавьте URL-адрес службы.

Обратите внимание, что если вы не добавите myService, это вызовет другую ошибку.

Ответ 11

У меня была эта проблема с моим сервером. Я нашел различные статьи в заголовках нескольких хостов с IIS и WCF, но если вы используете SSL, вы не можете добавить заголовок узла к идентификаторам веб-сайта в интерфейсе IIS, вы можете добавить их только к обычным HTTP-идентификаторам:

enter image description here

Однако вы можете добавить заголовки хостов SSL через командную строку script, и это решило проблему для меня:

cscript.exe adsutil.vbs set /w3svc/<site identifier>/SecureBindings ":443:<host header>"

Для получения дополнительной информации об этом см. эту ссылку: http://blumenthalit.net/blog/Lists/Posts/Post.aspx?ID=14

Ответ 13

Спасибо Kanasz Robert. Шаги, которые решили мою проблему - 1.Проведите wsdl в браузере и сохраните файл (нажав .svc? Wsdl из браузера) сохраните как .wsdl

  1. Создайте файлы xsd, нажав url из wsdl (xsd = xsd0 и т.д.) и сохраните файл в браузере, сохраните как .wsdl

  2. замените все ссылки на машинные имена из wsdl с именем домена (или IP-адресом) и измените ссылки xsd и сохраните AND замените все ссылки на машинные имена из файлов xsd с именем домена (или IP-адресом) не забудьте указать xsd файл с расширением .xsd(то есть name0.xsd, name1.xsd, name2.xsd)

  3. Скопировать файлы wsdl и xsd в виртуальный каталог добавьте в свой web.config следующие строки:

<behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true" externalMetadataLocation="http://IPorDomainName/MyServices/FileTransferService.wsdl"  />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>