Remoting技术问题,在第二次客户端激活远程组件时,前一次调用远程组件所得到的CallContext中的对像被清成掉??Why
以下是我为了在服务端和客户端中通过CallContext进行传送的类型定义
[Serializable]
public class UserToken : ILogicalThreadAffinative
{
public SqlGuid m_Session;
public UserToken(SqlGuid session)
{
m_Session = session;
}
public SqlGuid SessionId
{
get
{
return m_Session;
}
set
{
m_Session = value;
}
}
//以下两个函数是据微软的文档所说的解决方法,不过一点也没有效果,不知错在那里了.
public new int GetHashCode()
{
return base.GetHashCode();
}
public new Type GetType()
{
return base.GetType();
}
}
原先我以为CallContext中的传输的对像会一直保留,结果确不是这样.过程如下:
我设计了一个服务组件,其中一个方法会调用CallContext.SetData存入一个上述类型的对象,客户端也可以正常调用CallContext.GetData得到这个对象,然而当我再次应用客户端激活一个新的服务端对象时,CallContext中的数据确被清掉了,并得到提示"试图访问调用方不可访问的字段",为什么会这样?微软的文档说如果类型不实现ILogicalThreadAffinative接口,就不会被清掉,但不能进行远程传送,对我没什么意义.
我希望这个对像总是被传送,而不会被清掉.因为我希望它用于标识客户会话标识,表示客户是经过验证的合法客户.