有个类似的问题就是:开发的时候数据库的IP(假设是SQL server数据库)是自己开发部门的数据库IP,但我作为软件发布的时候用户的数据库IP是需要在软件安装后才得知的……假如我用ADO的话,我可以让用户在第一次运行软件的时候输入一次数据库IP地址然后保存到.INI文件中,因为我需要的只是一个数据库连接字符串……但是如果是对WS的调用呢?假如我也用上面的能得到WS运行的IP,又能怎么办呢?
  很急需要解决的问题!!  我的软件是在Extrate上运行的,可不要告诉我到UDDI注册什么的方法哦`

解决方案 »

  1.   

    WebService不是要在本地建一个代理类吗?我好像记得在这个代理类中有一个URL的属性或者是字段(查看一下代理类的源代码),应该是可以在运行时改变的。
      

  2.   

    使用域名而不是ip来指定WS的URL,这样应该好些把
      

  3.   

    cometsky(彗星天空):
     好象是会生成一个代理类,但它是一段原代码,怎么改变呢!?
     
     bdknight(死神) :但开发的时候指定域名,然后非得使用用户应用我们开发时候指定的域名,也不好吧。比如用户有原来的域名,其上有很多的系统在上面跑或者是它原来就已经有了一个很好的网络规划(包括服务器的域名划分),而你的软件要求用户非得把你的服务器的域名改为我们规定的,这……
      

  4.   

    to wenzm:
    这的确是个问题,如果确实如此,恐怕你的软件就很难傻瓜化安装了。我想到的一个折衷的办法是发布一个source code版本,然后用某种方法在安装的时候询问ip或者是域名,然后自动修改源代码自动重新编译,反正不让用户接触到src code就可以了
      

  5.   

    To  bdknight(死神):
        然后自动修改源代码自动重新编译……
        没太明白你的方法,难道你的意思是说在安装程序中在选择IP后,直接从
        
    source code找到相对应的版本的想对应的程序代码,然后把代码中的IP更换之后在编译(安装程序中完成)吗?  我头都大了……  
      

  6.   

    创建了Service后,可以利用Service.Url来改变。然后再调用Service的方法
      

  7.   

    利用Service.Url来改变
    可以具体一点吗? 
    我现在需要在.Net中调用和Delphi中调用,都不知道怎么解决!
      

  8.   

    在引用某一个ws时,出现以下信息:
    此 Web 服务使用 http://tempuri.org/ 作为它的默认命名空间。
    建议:在使 XML Web service 公开之前,请更改默认命名空间。如果不更改会产生什么影响?如果改应如何改?
      

  9.   

    我的实现方式是生成代理类,修改自动生成的代理类的源代码,将构造方法中指定URL的部分修改为从Web应用程序的Web.config文件读取。用起来很方便!
      

  10.   


      楼上很多兄弟的方法都可行!!!非常感谢
      做个总结,给大家参考!
      假如http://192.168.1.200/WsTest/Service1.asmx是我的WS的URL
      只要Add WebRefrence之后,调用时,
      (1) 先New 一个Ws Class(我的为TestWs)
       a=new ws.TestWs()
     然后
      (2) a.Url=sUrl//sUrl为通过处理后,把http://192.168.1.200/WsTest/Service1.asmx中的http://192.168.1.200替换为实际的发布后的IP(取得方法可以通过注册表或ini文件),其他不变
       (3) 在调用其中的方法  a.TestMothed()
      ……
       因为看到生成的代理类的代码中发现已经生成了http://192.168.1.200/WsTest/Service1.asmx这样的代码所以没想到直接更换Url就可以了。
       问题解决。爽~
      

  11.   


     .Net 中的问题解决了! Delphi中对WS的调用还在测试中 …… 
      

  12.   

    Delphi中可以用一个TXMLDocument控件,使用LoadFromFile方法,比如:XmlDoc.LoadFromFile('http://localhost/FileService/FileService.asmx/GetFile?');
    GetFile是一个WebMethod,这样,得到一个xml文档。调用TXMLDocument的相应属性解析具体内容就可以了。
      

  13.   

    一个完整的解决方案:
    http://www.microsoft.com/china/msdn/library/dv_vstechart/html/vbtchRedirectingApplicationToTargetDifferentXMLWebServiceDuringInstallation.asp
      

  14.   


     TO  yeswhb() :    在Delphi中调用WS,我原来知道的 只是通过D本身的WS导入工具,通过输入一个WS的URL就可以生成WS的代理类和接口……     但是,你用TXMLDocument能得到的只是这个WS的WSDL描述吧?不生成真正的代理类,怎么能调用远段的WS呢?能详细说说“调用TXMLDocument的相应属性解析具体内容就可以了”吗? 如果这样可以的话,我在TXMLDocument的LoadFromFile方法中动态取得URL,这样到是能解决问题了~~~~~~~~~~
      

  15.   

    niwalker() :那只是MicroSoft开发工具的调用!