WCF не использует имя компьютера вместо имени домена при просмотре MyService.svc? Wsdl - PullRequest
32 голосов
/ 22 января 2009

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

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

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

Ответы [ 13 ]

27 голосов
/ 09 ноября 2010

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

    <behaviors>
        <serviceBehaviors>
            <behavior name="AutoVaultUploadBehavior">
                <useRequestHeadersForMetadataAddress>
                    <defaultPorts>
                        <add scheme="https" port="443" />
                    </defaultPorts>
                </useRequestHeadersForMetadataAddress>
9 голосов
/ 21 мая 2009

Для 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" />

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

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

8 голосов
/ 07 марта 2013

Как указано в этой ссылке WCF использует имя компьютера вместо IP-адреса и не может быть разрешено

Это решило мою проблему, возможно, потому, что у меня есть несколько веб-сайтов на одном хосте, и это очень просто.

< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

</ system.serviceModel>

4 голосов
/ 21 мая 2012

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

<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
3 голосов
/ 21 мая 2009

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

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

<behaviors>
  <endpointBehaviors>
    <behavior name="xxx">
      <wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" />
    </behavior>
  ...
2 голосов
/ 01 мая 2013

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

1 голос
/ 03 августа 2011

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

enter image description here

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

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

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

1 голос
/ 13 апреля 2011

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

Обратите внимание, что если вы не добавите myService, появится еще одна ошибка.

1 голос
/ 05 октября 2010
1 голос
/ 09 августа 2010

Ни одно из этих решений не помогло мне. Я смог решить эту проблему с помощью очень простой пользовательской фабрики услуг.

Установка службы WCF на общем хостинге, повторно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...