WCF背后的WCF ..网址未引用公共域

时间:2017-12-07 14:46:12

标签: .net wcf web-config f5

我是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,而不是任何计算机名称或内部主机名。

0 个答案:

没有答案