防火墙后面的WCF WebService/IIS主机和配置问题

Eoi*_*ell 28 iis configuration wcf web-services .net-3.5

我有一个简单的WCF Web服务.它在我们的生产域中的默认网站上的IIS上托管.(当地地址:10.10.20.100)

默认情况下,此默认网站是在端口80上为"所有未分配的"IP设置的:但是,我注意到这导致WCF服务使用服务器本地DNS名称生成它的WSDL.即wsdl中的所有URI都是

http://myserver.subdomain.domain.com/.../...
Run Code Online (Sandbox Code Playgroud)

这并不好,因为我需要将此服务公开给那些不了解生产环境内部DNS的网站.此特定服务器没有外部DNS名称.只是一个外部IP地址......

我从"全部未分配" - >"10.10.20.100"更改IIS中的设置方面取得了一些成功

这会导致Service使用URI生成它的WSDL

http://10.10.20.100/.../...
Run Code Online (Sandbox Code Playgroud)

这适用于子域和其他子域中的其他计算机,但是我在这里被卡住了.服务器外部IP地址(1.2.3.4)通过某些NAT/PAT转换进行映射,因此未在服务器IP设置中明确设置(即它不在IP Config下显示)

因此,如果我从"所有未分配" - >"1.2.3.4"更改IIS默认网站IP地址,就像我对内部地址所做的那样,那么WCF服务就会回来......

错误的请求(无效的主机名)

如果我在内部IP地址上保留IIS配置,并尝试通过我得到的外部IP地址访问服务

No protocol binding matches the given address 
'http://1.2.3.4/TestService/Service.svc'. Protocol bindings are 
configured at the Site level in IIS or WAS configuration
Run Code Online (Sandbox Code Playgroud)

有没有办法让IIS/WCF使用未在服务器上显式配置的外部IP地址生成它的WSDL URI?

在我将WCF服务拉出窗外之前,有人帮助了我.

Jos*_*den 8

这是因为您没有设置主机标头.这似乎是一个非常普遍的问题,我一直遇到它.它没有为它生成的uris配置,它通过检查站点的主机头来查找正确的地址.即使它位于虚拟目录中,您也需要转到父级(在您的情况下为默认目录)并添加主机标头.

如果你不知道怎么做,请告诉我.