一般而言webservice是部署在哪台伺服器,然後它的address location就是指向哪個,但是由於有些情況處於各種原因,如網路策略,需要先訪問某個ip之後再進行跳轉到一個ip,這個時候就需要代碼控制websevice指向的IP地址了,就需要用到SoapExtensionReflector ...
一般而言webservice是部署在哪台伺服器,然後它的address location就是指向哪個,但是由於有些情況處於各種原因,如網路策略,需要先訪問某個ip之後再進行跳轉到一個ip,這個時候就需要代碼控制websevice指向的IP地址了,就需要用到SoapExtensionReflector類了,重寫裡面的ReflectDescription方法:如下
public override void ReflectDescription()
{
ServiceDescription description = ReflectionContext.ServiceDescription; foreach (Service service in description.Services)
{
foreach (Port port in service.Ports)
{
foreach (ServiceDescriptionFormatExtension extension in port.Extensions)
{
try
{
SoapAddressBinding binding = extension as SoapAddressBinding; string path = "http://1.1.1.1"; // 需要訪問的地址 {
string url = binding.Location;// 例如:http://localhost:8090/WebService/codes/new
//假如你websevice部署再2.2.2.2這台伺服器,那麼就將這個ip替換為你需要訪問的ip,同時你也可以根據binding.Location來判斷哪個服務需要替換。
binding.Location = binding.Location.Replace("http://2.2.2.2", path);
}
}
catch (Exception ex)
{ }
}
}
}
}
然後在web.config配置里configuration節點裡加上如下節點
<system.web>
<webServices>
<protocols>
<add name="HttpSoap"/>
</protocols>
<soapExtensionReflectorTypes>
<add type ="類名,該類所在文件夾"/>
</soapExtensionReflectorTypes>
</webServices>
</system.web>
註意:一但使用,則所有webservice將使用會執行這個程式