代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

在IIS托管的WCF服务中,如何禁用地址转换?

  •  1
  • Jader Dias  · 技术社区  · 15 年前

    当我发布我的ASP.NET WCF服务时,WSDL使用计算机名而不是域名。如何预防这种情况?

    例子:

    <wsdl:import namespace="http://ListenerService" 
         location="http://MACHINE_NAME/ListenerService/service.svc?wsdl=wsdl0"/>
    <soap:address location="http://MACHINE_NAME/ListenerService/service.svc"/>
    

    当我真的想要:

    <wsdl:import namespace="http://ListenerService" 
         location="http://MYDOMAIN.COM/ListenerService/service.svc?wsdl=wsdl0"/>
    <soap:address location="http://MYDOMAIN.COM/ListenerService/service.svc"/>
    
    2 回复  |  直到 14 年前
        1
  •  3
  •   marc_s Anurag    15 年前

    你不能阻止这种情况的发生——至少不能仅仅用配置开关或类似的东西。

    您可以通过阅读本文来解决您的问题-一个描述您遇到的确切问题的人以及可能的解决方法:

    http://www.codemeit.com/wcf/wcf-wsdl-xsdimport-schemalocations-link-to-local-machine-name-not-domain-name-while-hosted-in-iis.html

    另一个聪明的绅士也遇到了同样的问题:

    http://www.leastprivilege.com/HostHeadersSSLAndWCFMetadata.aspx

    马克

        2
  •  3
  •   Case    14 年前

    只是为了让未来的访问者发现这个问题的正确答案:上面的评论是不正确的。您可以通过更改web.config中的几个选项来解决此问题。以下是我的设置方式:

    <system.serviceModel>
        <services>
          <service name="ourWebService.ourService" behaviorConfiguration="ourWebService.ourServiceBehavior">
        <host>
                <baseAddresses>
                    <add baseAddress="http://oursitename.com:83/ourService.svc" />
                </baseAddresses>
            </host>
            <endpoint bindingNamespace="http://oursitename.com:83/ourService.svc" 
            address="" binding="basicHttpBinding" contract="ourIWebService.IourService" 
            bindingConfiguration="customBinding2">
              <identity>
                <dns value="oursitename.com" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
          </service>
        </services>
        <bindings>
        <basicHttpBinding>
            <binding name="customBinding2" >
              <readerQuotas maxArrayLength="2147483" maxStringContentLength="2147483647" maxNameTableCharCount="2147483647" />
            </binding>
          </basicHttpBinding>
        </bindings>
        <behaviors>
          <serviceBehaviors>
            <behavior name="ourWebService.ourServiceBehavior" httpGetUrl="http://oursitename.com:83/ourService.svc">
              <serviceMetadata httpGetEnabled="true" httpGetUrl="http://oursitename.com:83/ourService.svc/mex"/>
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    

    重要的位是GET URL、标识和基址。