404 BadRequest使用IIS主机标头通过外部IP公开WCF服务

时间:2009-02-16 13:47:59

标签: wcf iis-6 networking wcf-binding

我们在Windows Server 2003上托管WCF Web服务。此服务器只有2个内部IP。我们希望从外部公开服务。这是通过将外部IP映射到服务的防火墙完成的。

因此,我需要修改服务以显示内部链接的外部IP。这不是问题,因为它只能在外部使用。

更改IIS中的主机标头值会从IIS发出“错误请求(无效主机名)”响应。我还在web.config中的端点条目中添加了一个“地址”值...但它只是指向内部机器名称。有什么想法吗?

编辑:我可以验证IIS7具有完全相同的行为。地址不起作用。不同的主机名给出了无效的主机名错误。有没有办法提出不同的(虚构的)IP? :/

EDIT2:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicAnonymous">
                <security mode="None"/>
            </binding>
        </basicHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="Extended">
                <serviceMetadata httpGetEnabled="true"/>
                <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <diagnostics>
        <messageLogging logEntireMessage="true" logMalformedMessages="false" logMessagesAtServiceLevel="false" logMessagesAtTransportLevel="true" maxMessagesToLog="3000"/>
    </diagnostics>
    <services>
        <service behaviorConfiguration="Extended" name="AnCWCFWebService.ProductInfoProvider">
            <endpoint address="" binding="basicHttpBinding" name="ASMX" bindingConfiguration="BasicAnonymous" contract="AnCWCFWebService.Interfaces.IProductInfoProvider"/>
        </service>
    </services>
</system.serviceModel>

3 个答案:

答案 0 :(得分:7)

答案 1 :(得分:1)

您只需在IIS中配置主机标头,以便WSDL引用中的链接将使用donmain名称而不是本地计算机名称。

退房 Steps to configure IIS host header so that WCF will use domain name in WSDL references.

答案 2 :(得分:1)

为什么不直接为服务器分配新的IP地址而不是乱搞主机名? Windows Server可以为同一个NIC提供多个IP地址。

Here是一篇关于它的文章。