by definition, SingleCalls are handled by new objects. So if you want to keep state information, either you need to provide the state information in each call, or don't use SingleCall then, use Singleton or client-activated remote objects

解决方案 »

  1.   

    saucer:
      我的程序是C/S结构,客户端通过接口远程调用服务器组件,并返回DataSet,如果采用Singleton,每调用一次组件,DataSet中数据就增加一次(本不应该增加),如果用SingleCall,DataSet中数据正确。请问如何处理?
      另外,你提到的客户端激活远程对象如何实现?
      谢谢!
      

  2.   

    既然“DataSet中数据正确”,你要解决什么?
      

  3.   

    那可以试着像saucer说的一样自己在SingleCall中加入状态信息
      

  4.   

    调用同一个对象的第一个方法时结果正确,调用第二个方法时结果出错,我检查错误原因是当调用第二个方法时,适配器是空的,因此不能插入或更新数据,请问如何解决呢?代码示意如下:class DealData: :MarshalByRefObject,IInterface
    {
      private SqlConnection SqlDataBaseConnection;
      private DataSet Orgnset=new DataSet();
      private SqlDataAdapter SOrgnAdapter;  public DataSet Function1(ref SqlConnection DBConnection)
      {
       ...
        string cmdline="select orgid from organization";
        SqlCommand Query=new SqlCommand(cmdline,DBConnection);
        SOrgnAdapter=new SqlDataAdapter(Query);
        SOrgnAdapter.Fill(Orgnset,"OrgList");
        cmdline="insert into orgrole (orgname,parentid,description) values ....
        SOrgnAdapter.InsertCommand=new SqlCommand(cmdline,DBConnection);
        SqlParameter parameter=SOrgnAdapter.InsertCommand.Parameters.Add...
        ......
      }  public void Function2()
      {
        SOrgnAdapter.Updata(Orgnset.Tables["UserMemList"]);
        SOrgnAdapter.Fill(Orgnset);
      }
    }
      

  5.   

    你采用的是SingleCall
    第2次调用实例化的是新的对象,当然是空的了。
    如果使用SingleCall方式,有两个办法
    1、将SqlDataAdapter声明为静态的,但是在并发下会出错
    2、在类DealData的构造函数中实例化SOrgnAdapter
      

  6.   

    每调用一次方法,就得用SqlDataAdapter填充(Fill)一次DataSet,是不是对效率有影响?
    另外SqlConnection是从其他类中传过来的,但是构造函数不允许有参数,怎么办?
      

  7.   

    if you insist, create a serializable class with the state information and pass it into the SingleCall method[Serializable]
    class SomeClass
    {
      public string info;
    }void SomeMethod(SomeClass state,...)
      

  8.   

    服务端激活,在客户端可以通过接口访问服务端组件.
    但是客户端激活,我通过接口生成实例时,提示"对于不是从 MarshalByRefObject 派生的类型,不支持激活属性。"。难道客户端不能接口访问服务端组件吗?如果可以,我该怎么做?谢谢!