我有一个问题,如标题中所述。一些背景信息。
有一个像https://external_server.something.xy/SomeService/Something
这样的网址,通过反向代理向外界展示。
<transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
)。出于此和一些合同原因,将静态WSDL文件(Something.wsdl)分发给客户端。唉,还有很多代码可以在没有分布式静态WSDL文件的情况下检索WSDL,然后动态生成调用(无论出于何种原因)。
如果我在<serviceMetadata httpGetEnabled="true" externalMetadataLocation="../Something.wsdl"/>
之类的配置文件中设置,将通过 HTTP 307临时重定向欢迎客户。
无论如何,通过一些研究,我发现在相同的IIS上,设置IIS主机头也会影响许多其他应用程序。这是一个禁忌的解决方案。我可以在web.config中配置什么,还是应该调查服务器上或反向代理上的URL重写方案?
如果我可以设置帮助页面上显示的URL,那么它就不会显示内部服务器(这样链接也可以正常工作!)。
答案 0 :(得分:2)
我们遇到了类似的问题并通过简单地将静态WSDL放在路由器上来处理它(我假设这是你所指的反向代理)并关闭服务本身的serviceMetadata。
答案 1 :(得分:2)
为了回答我自己的问题,我(或我们)在反向代理上重写了请求,因此它对客户端和内部服务器都是透明的。现在,它拦截了对此服务的元数据查询,并将它们指向静态WCF文件(通过帮助页面中显示的URI),然后返回。
问题在于,当我使用externalMetadaLocation标记时,IIS返回HTTP 307,然后反向代理转发到客户端。当然内部服务器不知道外部地址,因此重定向是内部名称,因此存在问题。
我想的另一个选择是编写一个与Web服务的 Something ? wsdl 部分匹配的REST函数,因此它不会到达WCF元数据设施。在考虑到whle之后,我开始考虑使用IWsdlExceportExtension来完成接收请求的工作,然后抓住文件并返回它(即没有重定向)。