在使用.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()
...
{
[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()
...
客户端写法是
TcpClientChannel tcpclient = new TcpClientChannel();
ChannelServices.RegisterChannel(tcpclient);
DrugBasicInfo abc = (DrugBasicInfo )Activator.GetObject(typeofDrugBasicInfo ), string.Format("tcp://{0}:{1}/{2}", strServerIP, strPort, ServerName));