gpt4 book ai didi

防火墙背后的 WCF WebService/IIS 托管和配置问题

转载 作者:行者123 更新时间:2023-12-03 10:05:04 24 4
gpt4 key购买 nike

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

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

http://myserver.subdomain.domain.com/.../...

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

我在将 IIS 中的设置从“所有未分配”更改为“10.10.20.100”方面取得了一些成功

这会导致服务使用 URI 生成它的 WSDL
http://10.10.20.100/.../...

这对于子域内和其他子域中的其他机器很好,但在这里我被卡住了。服务器外部 IP 地址 (1.2.3.4) 是通过一些 NAT/PAT 转换映射的,因此它没有在服务器 IP 设置中明确设置(即它没有显示在 IP 配置下)

因此,如果我将 IIS 默认网站 IP 地址从“所有未分配”->“1.2.3.4”更改为内部地址,那么 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

有什么方法可以让 IIS/WCF 使用未在服务器上明确配置的外部 IP 地址生成它的 WSDL URI?

在我将 WCF 服务踢出窗口之前,请有人帮助我。

最佳答案

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

如果您不知道如何执行此操作,请告诉我。

关于防火墙背后的 WCF WebService/IIS 托管和配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/793122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com