在使用.Net Remoting方式的中间层的方法里返回自定义对象报错以下是代码示例:在中间层里,定义了如下自定义类:namespace TJ.CHSIS.MHIS.InPDoctor
{
    [Serializable] //指定为可序列化
    public class DrugBasicInfo
    {
        private string drugId;        public string DrugId
        {
            get { return drugId; }
            set { drugId = value; }
        }        public DrugBasicInfo()
        {
            //
        }
    }
}在中间层里定义了如下方法:namespace TJ.CHSIS.MHIS.InPDoctor
{
    public class InPDoctorDBI : MarshalByRefObject
    {
        protected OracleAccess _oraConnect;        public InPDoctorDBI()
        {
        }        public DrugBasicInfo GetDrugBasicInfo()
        {
            DrugBasicInfo drugInfo = new DrugBasicInfo();            drugInfo.DrugId="1";
            return drugInfo;
        }
}
在客户端引用了中间层的dll,并调用该方法:DrugBasicInfo drugInfo = new DrugBasicInfo();
drugInfo = inPDoctorDBI.GetDrugBasicInfo(); //报错
//drugInfo = (DrugBasicInfo)(inPDoctorDBI.GetDrugBasicInfo()); //改成这样也报错客户端报错,报错信息如下(摘要):
************** 异常文本 **************
System.InvalidCastException: 返回参数具有无效的类型。
   ...
   在 TJ.CHSIS.MHIS.InPDoctor.InPDoctorDBI.GetDrugBasicInfo()
   ...

解决方案 »

  1.   

    remoting得有服务端,使用TcpChannel注册通道
    客户端写法是
     TcpClientChannel tcpclient = new TcpClientChannel();
                    ChannelServices.RegisterChannel(tcpclient);
                    DrugBasicInfo abc = (DrugBasicInfo )Activator.GetObject(typeofDrugBasicInfo ), string.Format("tcp://{0}:{1}/{2}", strServerIP, strPort, ServerName));