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
Ответ 3
Как указано в этой ссылке WCF использует имя компьютера вместо IP-адреса и не может быть разрешено
Он решил мою проблему, может быть, потому, что у меня есть несколько веб-сайтов на одном хосте, и это очень просто.
< serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel >
Ответ 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.
Ответ 7
Я добавил здесь решения, http://knowledgebaseworld.blogspot.com/2010/06/domain-name-replaced-with-machine-name.html. он должен работать для вас всех, поскольку он работает отлично со мной на местном, постановке и производстве, не делая привязки к iis
Ответ 8
Ни одно из этих решений не помогло мне. Я смог решить это с помощью очень простой пользовательской службы Factory.
Установка службы WCF на сайте общего хостинга, пересмотренный
Ответ 9
Вы пробовали установить заголовок хоста в IIS?
Ответ 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
Ответ 12
Этот пост решил это для меня. Мне нужно связать свое доменное имя с моим IP-адресом и веб-сайтом в IIS.
http://www.codemeit.com/wcf/wcf-wsdl-xsdimport-schemalocations-link-to-local-machine-name-not-domain-name-while-hosted-in-iis.html
Ответ 13
Спасибо Kanasz Robert.
Шаги, которые решили мою проблему -
1.Проведите wsdl в браузере и сохраните файл (нажав .svc? Wsdl из браузера) сохраните как .wsdl
-
Создайте файлы xsd, нажав url из wsdl (xsd = xsd0 и т.д.) и сохраните файл в браузере, сохраните как .wsdl
-
замените все ссылки на машинные имена из wsdl с именем домена (или IP-адресом) и измените ссылки xsd и сохраните AND замените все ссылки на машинные имена из файлов xsd с именем домена (или IP-адресом)
не забудьте указать xsd файл с расширением .xsd(то есть name0.xsd, name1.xsd, name2.xsd)
-
Скопировать файлы wsdl и xsd в виртуальный каталог
добавьте в свой web.config следующие строки:
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" externalMetadataLocation="http://IPorDomainName/MyServices/FileTransferService.wsdl" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>