我的问题与此密切相关:如何从非标准端口使用 .NET Web 服务?. 我的 Web 服务在端口转发防火墙后面运行,因此 WSDL 文档中报告的端口号包含内部高编号端口。我编写了一个能够重写 WSDL 文档的 SoapExtensionReflector 类。因此,像 example.com/path/loginservice?wsdl 这样的请求得到了正确处理。
但是,这不处理“迪斯科”请求:example.com/path/loginservice?disco。这将返回一个 XML 文档,如下所示:
<discovery>
<contractRef ref="http://example.com:10092/loginservice.asmx?wsdl" docRef="http://example.com:10092/loginservice.asmx"/>
<soap address="http://example.com/path/loginservice.asmx" binding="q1:LoginServiceSoap"/>
<soap address="http://example.com/path/loginservice.asmx" binding="q2:LoginServiceSoap12"/>
</discovery>
虽然 SoapExtensionReflector 已经正确地重写了soap 绑定,但是contractRef 和docRef URL 具有高编号的端口。我怎样才能重写它们呢?