使用.NET 4.7.1和最小的WCF配置,WSDL在从HTTPS访问时显示HTTP地址,并显示错误的主机,除非在配置中启用了端口80.
此服务应仅在HTTPS上可用,这将由防火墙规则进一步强制执行。
我的配置如下所示
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled="True"/>
<useRequestHeadersForMetadataAddress/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
结果在浏览器中看起来像这样(演示错误的方案和不正确的主机。抱歉我必须阻止大部分内容,但你应该能够得到我所说的......)
我理解&#34; useRequestHeadersForMetadataAddress&#34;告诉WCF我确实希望WSDL就在服务旁边。我认为它也应该能够处理相同的计划意图。
有什么想法吗?
答案 0 :(得分:0)
我的问题是假设我不需要指定绑定配置。如果没有绑定配置,我不认为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>