我是WCF的新手,并且在f5后面的WCF服务在WSDL中显示正确的URL(使用公共主机名)时遇到了问题。请求正在通过以下路径: 客户---(HTTPS)---> F5 ---(HTTPS)---> WebFacingServer ---(HTTP)---> ApplicationServer的。 https证书卸载将在面向Web的服务器中进行,并使用HTTP将请求发送到应用程序服务器。 我的WCF需要部署在应用程序服务器中,外部客户端应该能够通过https://myPublicDomain.com/myServiceApp/service.svc访问它 我在http上的应用服务器中部署了服务并使用了basichttpbinding端点。下面是我的服务的Web.config:
<system.serviceModel>
<serviceHostingEnvironment>
<serviceActivations>
<add factory="System.ServiceModel.Activation.ServiceHostFactory"
relativeAddress="ServiceSoap.svc"
service="MyAppNameService.Service" />
</serviceActivations>
</serviceHostingEnvironment>
<services>
<service name="MyAppNameService.Service">
<endpoint address="" binding="basicHttpBinding" contract="MyAppNameService.IService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="https://MyPublicDomain.com/MyAppNameGateWay/ServiceSoap.svc" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug httpHelpPageEnabled="false" includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
当使用带有HTTPS(https://MyPublicDomain.com/MyAppNameGateWay/ServiceSoap.svc?WSDL)的puclic域从外部调用WSDL时,我可以看到WSDL,但WSDL中的URL与实际的机器名一致。我尝试使用:
<useRequestHeadersForMetadataAddress>
<defaultPorts>
<add scheme="http" port="80" />
<add scheme="https" port="443" />
</defaultPorts>
</useRequestHeadersForMetadataAddress>
导致URL显示主机名WebfacingServer用于向ApplicationServer发出请求,而不是命中f5(MyPublicDomain.com)的公共域。
我还尝试使用https://MyPublicDomain.com/MyAppNameGateWay/ServiceSoap.svc配置端点的地址并添加
<serviceMetadata httpGetEnabled="true" httpGetUrl="https://MyPublicDomain.com/MyAppNameGateWay/ServiceSoap.svc" />
但是这导致了一个错误:
HttpGetUrl必须是相对URI或带有方案'http'的绝对URI。 “https://MyPublicDomain.com/MyAppNameGateWay/ServiceSoap.svc”是一个带有方案“https”的绝对URI。
我无法使用httpsGetUrl,因为请求以http格式发送,因此如果我将其设为httpsGetUrl则无用。
我没有想法..如果有人知道如何配置服务,我将不胜感激,因此外部客户端将在WSDL中看到公共域名中的URL,而不是任何计算机名称或内部主机名。