问题产生背景:
假设webservice的访问地址为:172.1.1.1:3333。现在对webservice做了负载,负载服务器对外发布的WSDL中把实际webservice的端口号给带上了。例如:bky.com:3333(实际情况),但是我们期望的应该是:bky.com:80。所以就想到在生成wsdl时修改下端口号,查了下资料,使用SoapExtensionReflector,但结果是只能修改SOAP方式发布的地址,截获不了HTTP方式的port。
望大神解答,感激不尽!
wsdl修改结果:
可以用 serviceHostFactory, 在.svc 或者 .asmx 文件中设置
public class MyServiceHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
Uri[] requiredAddress = GetAppropriateBase(baseAddresses);
return base.CreateServiceHost(serviceType, requiredAddress);
}
Uri[] GetAppropriateBase(Uri [] baseAddresses)
{
// Do you trick here, remove the port info, or change uri to your new domain.
}
}
webservice的.asmx中没有ServiceHost指令,WCF的.svc中才有呀
@子默: 是的 以上code只能用在 WCF里.
我也没什么好办法了. 不过webservice 的 wsdl 可以单独放在另一处供client下载, 可以把这个wsdl的内容修改成你需要的url
代码中可以直接写地址的