首页新闻找找看学习计划

修改WSDL,如何去掉HttpGet的address中的端口号?

0
悬赏园豆:200 [待解决问题]

问题产生背景:

假设webservice的访问地址为:172.1.1.1:3333。现在对webservice做了负载,负载服务器对外发布的WSDL中把实际webservice的端口号给带上了。例如:bky.com:3333(实际情况),但是我们期望的应该是:bky.com:80。所以就想到在生成wsdl时修改下端口号,查了下资料,使用SoapExtensionReflector,但结果是只能修改SOAP方式发布的地址,截获不了HTTP方式的port。

望大神解答,感激不尽!

 

wsdl修改结果:

- <wsdl:service name="WebService1">
- <wsdl:port name="WebService1Soap" binding="tns:WebService1Soap">
  <soap:address location="http://已成功修改:3821/WebService1.asmx" />
  </wsdl:port>
+ <wsdl:port name="WebService1Soap12" binding="tns:WebService1Soap12">
  <soap12:address location="http://已成功修改:3821/WebService1.asmx" />
  </wsdl:port>
- <wsdl:port name="WebService1HttpGet" binding="tns:WebService1HttpGet">
  <http:address location="http://localhost:3821/WebService1.asmx" />
  </wsdl:port>
- <wsdl:port name="WebService1HttpPost" binding="tns:WebService1HttpPost">
  <http:address location="http://localhost:3821/WebService1.asmx" />
  </wsdl:port>
  </wsdl:service>
可以看到 最后2个以http方式发布的地址是没有改到的。
 
子默的主页 子默 | 初学一级 | 园豆:4
提问于:2014-01-06 09:07
< >
分享
所有回答(2)
0

可以用 serviceHostFactory,   在.svc 或者 .asmx 文件中设置

 

<% @ServiceHost Language=C# Debug="true" Factory="MyServiceHostFactory" Service="HelloService" CodeBehind="~/App_Code/HelloService.cs" %>

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.


}


}


 

gunsmoke | 园豆:3592 (老鸟四级) | 2014-01-06 09:55

webservice的.asmx中没有ServiceHost指令,WCF的.svc中才有呀

支持(0) 反对(0) 子默 | 园豆:4 (初学一级) | 2014-01-06 10:53

@子默: 是的 以上code只能用在 WCF里.

我也没什么好办法了. 不过webservice 的 wsdl 可以单独放在另一处供client下载, 可以把这个wsdl的内容修改成你需要的url

支持(1) 反对(0) gunsmoke | 园豆:3592 (老鸟四级) | 2014-01-07 08:21
0

代码中可以直接写地址的

月明时勤 | 园豆:746 (小虾三级) | 2014-01-06 15:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册