在调用Webservice的问题上,和朋友有个争论,各位发表一下看法, 讨论一下:
如果一个UI层的方法循环去调用db层Webservice下的一个方法
争议在于:
1、每次去实例化一个webservice后再调用那个方法
2、把Webservice做一个属性, 再调用那个方法我朋友的意思是,这样做并没有增加性能,每次都一样会重新创建connection
各位怎么看?

解决方案 »

  1.   

    补充一下:
    例如:WebSerivceX是为了维护一个数据库表,下面有FillTable和UpdateTable两个Web Method
    那这两个方法都需要调用由DatasetDesigner生成的强类型Adapter: XTableAdapter那么在WebServiceX下面定义一个XTableAdapter = null;的空实例,再做一个属性,在get的时候去判断是否为空,来决定是否实例:如下
    private XTableAdapter m_adpXTable = null;
    internel XTableAdapter Adapter {
        get { 
            if (null == this.m_adpXTable) this.m_adpXTable = new XTableAdapter();
            return this.m_adpXTable;
        }
    }而在使用的时候:
    [WebMethod]
    public XTable FillTable(queryClause) {
        return this.Adapter.Fill(queryClause);
    }[WebMethod]
    public int UpdateTable(XTable) {
        return this.Adapter.Update(XTable);
    }最后重载Dispose来释放m_adpXTable 
    if (null != m_adpXTable ) m_adpXTable .dispose();这样写法 是否会更好 主动回收
      

  2.   

    = new XTableAdapter();
    这个就是实例化了.
      

  3.   

    在客户端调用webservice,不管是一个Client实例,调用多次;还是多个Client实例,每个调用一次。服务器端,都是对每个request都会初始化新的Service类,对Requset进行处理,就想aspx那样。因此lz在这方面的担心完全是没有意义的。WCF可以做出更多的控制,但是asmx不行。