欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

websevice动态控制访问ip

程序员文章站 2022-04-08 21:33:39
一般而言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将使用会执行这个程序