Используя .NET 4.7.1 и минимальную конфигурацию WCF, WSDL при доступе по HTTPS показывает HTTP-адрес и показывает неправильный хост, если в конфигурации не включен порт 80.
Эта служба должна быть доступна только по протоколу HTTPS, что в дальнейшем будет применяться правилом брандмауэра.
Моя конфигурация выглядит так
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled = "True"/>
<useRequestHeadersForMetadataAddress/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
И результат выглядит так в браузере (демонстрируя неправильную схему и неправильный хост. Извините, что я должен заблокировать большую часть этого, но вы должны быть в состоянии понять то, что я говорю ...)
Я понимаю, что «useRequestHeadersForMetadataAddress» сообщает WCF, что мне действительно нужен WSDL рядом со службой. Я предположил, что он также должен уметь обрабатывать те же намерения для схемы.
Есть предположения?





Моя проблема заключалась в предположении, что мне не нужно указывать конфигурацию привязки. Без конфигурации привязки я не думаю, что WCF сможет понять, что вам нужны привязки HTTPS, и все проблемы возникли оттуда.
Так что, к сожалению, размер моего файла web.config увеличился вдвое!
<basicHttpBinding>
<binding name = "SecureServiceBinding" closeTimeout = "00:02:00" openTimeout = "00:02:00" receiveTimeout = "00:10:00" sendTimeout = "00:01:00" allowCookies = "false" bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "20480000" maxBufferSize = "10240000" maxReceivedMessageSize = "10240000" textEncoding = "utf-8" transferMode = "Buffered" useDefaultWebProxy = "true" messageEncoding = "Text">
<readerQuotas maxDepth = "100" maxStringContentLength = "2147483647" maxArrayLength = "2147483647" maxBytesPerRead = "4096" maxNameTableCharCount = "2147483647"/>
<security mode = "Transport">
<transport clientCredentialType = "None" proxyCredentialType = "None" realm = ""/>
<message clientCredentialType = "UserName" algorithmSuite = "Default"/>
</security>
</binding>
</basicHttpBinding>