当服务器位于 NAT 后面时如何通过 Internet 使用 IIS WCF 主机服务

How to use IIS WCF Host Service over internet when server is behind NAT

我已经浪费了 xx 个小时来寻找解决方案,但没有成功:(

我在 NAT 后面安装了 IIS 服务器 ,安装了 WCF 服务主机(在 IIS 上)。 本地和通过 LAN 通信客户端-WcfService 工作 属性,但是当我尝试将服务引用(通过 Internet)添加到我的 wcf 服务主机时 - 在 visual studio,我遇到如下问题:

The request failed with HTTP status 400: Bad Request. Metadata contains a reference that cannot be resolved:

我已将我的路由器端口 WAN 重定向到我的 WCF 服务的端口 Lan。它的工作 属性 因为当我通过互联网连接到浏览器中的 http://[...] .svc 文件时,我可以看到正确的站点。

我的web.config

<system.serviceModel>
    <behaviors>
  <serviceBehaviors>
    <behavior name="mexBehavior">
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="mexBehavior" name="KSPDJOBService.KSPDJOBService">
    <endpoint address="" binding="wsHttpBinding" contract="KSPDJOBService.IKSPDJOBService" />

    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost/KSPDJOBService" />
       </baseAddresses>
    </host>
  </service>
</services>

任何想法如何解决我的问题?如果有任何提示,我将不胜感激。

谢谢。 对不起我的英语:)

我解决了这个问题。

第一个问题是:在端口转发中,路由器将 WAN 端口 X 转发到本地端口 Y

第二个问题是:在 svc/wsdl 我有本地 url (这就是为什么我在尝试从互联网连接时出现 HTTP 400 错误)

已解决:

第一。所以我已经转发 WAN_port: Y 到 LAN_port: Y(相同的端口)

第二。我在 IIS 站点 - 绑定主机名中添加为 WAN_domain_name.

感谢:https://gavinmckay.wordpress.com/2009/03/24/howto-fix-wcf-host-name-on-iis