通常而言webservice是部署在哪臺服務器,而後它的address location就是指向哪一個,可是因爲有些狀況處於各類緣由,如網絡策略,須要先訪問某個ip以後再進行跳轉到一個ip,這個時候就須要代碼控制websevice指向的IP地址了,就須要用到SoapExtensionReflector類了,重寫裏面的ReflectDescription方法:以下web
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將使用會執行這個程序ide