websevice动态控制访问ip
程序员文章站
2022-07-11 09:37:50
一般而言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;
{
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;
{
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)
{
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将使用会执行这个程序