情况是这样的,公司有个软件项目,之前调用的是一个服务器的webservice,现在新加了一个服务器,新服务器上的webservice和原来服务器上是一模一样的。就里面的数据不一样,现在想在软件上加一个下拉框选择服务器,如何能实现下拉框选择后,更改webservice上的URL。实例化webservice更改URL不起什么作用,因为项目上实例化的地方太多了。现在就想如何用IO的方式更改本地webservice的URL,或者有没有更好的解决办法,谢谢各位了!

解决方案 »

  1.   

    代理类,应该有URL的属性吧,给它赋值就可以了。
      

  2.   

    IO的方式更改本地webservice的URL只的是修改config中的url吗?
    这种方法估计也行不通,因为如果是winform或者windows serivce,修改config后要重启启动才能生效。如果是asp.net修改web.config会造成asp.net程序的重启。
      

  3.   

     在实例化WebService对应的类的时候,url使用变量,不要直接使用某个地址。
     能在下拉框中修改这个变量,修改后访问的就是新的Url了
      

  4.   


    谢谢,不是asp.net,是winform程序,有没有比较好的解决办法呢?
      

  5.   

    我赶脚可以加个拦截器来修改 SoapHeader 的Action 地址。而这个拦截器可以接受外部参数
      

  6.   


    URL是使用的变量,我的意思是,只需要一个地方改webservice的URL,然后其他地方实例化的时候,使用的是更改后的URL。而不需要再重新设置URL了,因为程序中实例化webservice的地方太多了。
      

  7.   

    你现在实例化 WebService 的代码是直接写死的吗?比如 var client = new Soap1Client("http://xxx.xxx.xxx.xxx/service1"); ???
      

  8.   


    实例化就是webservice.service service=new webservice.service();这样写的。
      

  9.   

    很简单哪,你把本地代理的  Serivce 类修改一下... 虽然这个类是自动生成的。 public partial class Service1SoapClient : System.ServiceModel.ClientBase<WebServiceClientTest.ServiceReference1.Service1Soap>, WebServiceClientTest.ServiceReference1.Service1Soap {
         
         public Service1SoapClient() {
             this.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://xxxx");
         }
         
    红色部分可以随便从哪个全局变量里取得了。
      

  10.   

    config 的更改想即时的体现的话,你需要用订阅的模式订阅当文件更改时执行变量更改操作用FileSystemWatcher
      

  11.   

    实例化就是webservice.service service=new webservice.service();这样写的。
    那你可以按照你选择的去实例化啊:
    比如选择了A:
    实例化就是webservice.service service=new webservice.service();这样写的。
    选在了B
    实例化就是webservice.service1 service=new webservice.service1();这样写的。
      

  12.   


    你好,我就是不想去重新去更改实例化的地方,就想问有没有更简单的解决办法直接更改webservice的地址,下次实例化就是用的更改之后的地址
      

  13.   


    前辈,求具体的实现方法。谢谢了,是在webservice的代码上这样写,还是在软件本地这样写啊?麻烦前辈了。