C# - Marshall by value 问题!

Posted

技术标签:

【中文标题】C# - Marshall by value 问题!【英文标题】:C# - Marshall by value problem! 【发布时间】:2010-12-23 07:13:22 【问题描述】:

事情是这样的,我在使用远程机制“按值封送”创建新对象时遇到问题。

这是我的课:

  [Serializable]
    internal class Empleado_MBV
    
        public Empleado_MBV()
        
            Id = 123456789;
            Nombres = "NotEntry";
            Apellidos = "NotEntry";
            FechaNacimiento = DateTime.MinValue;
            Direccion = "NotEntry";
            Metapreferencias = "NotEntry";
        

        private List<Multas> _multas;

        internal List<Multas> Multas
        
            get  return _multas; 
            set  _multas = value; 
        

        private int _id;

        public int Id
        
            get  return _id; 
            set  _id = value; 
        
        private string _nombres;

        public string Nombres
        
            get  return _nombres; 
            set  _nombres = value; 
        
        private string _apellidos;

        public string Apellidos
        
            get  return _apellidos; 
            set  _apellidos = value; 
        
        private DateTime _FecNac;

        public DateTime FechaNacimiento
        
            get  return _FecNac; 
            set  _FecNac = value; 
        
        private string _direccion;

        public string Direccion
        
            get  return _direccion; 
            set  _direccion = value; 
        
        private string _metapreferencias;

        public string Metapreferencias
        
            get  return _metapreferencias; 
            set  _metapreferencias = value; 
        

        public string _AppDomainHost
        
            get  return AppDomain.CurrentDomain.FriendlyName.ToString(); 
        
    

但是当我尝试在另一个“appdomain”中创建对象时,“Empleado”的属性“_AppDomainHost”并没有显示我创建的“appdomain”,而是默认显示“appdomain”。有什么想法吗?

AppDomain ad1 = AppDomain.CreateDomain("NewAppDomain");
        //Crear new object in my new AD.
        Empleado_MBV mbv_emp =      (Empleado_MBV)ad1.CreateInstanceFromAndUnwrap("DEMO_MBV_MBR.exe", "DEMO_MBV_MBR.Empleado_MBV");

        Console.WriteLine(AppDomain.CurrentDomain.FriendlyName.ToString());
        Console.WriteLine("MBV : 0",mbv_emp._AppDomainHost.ToString());

        Console.ReadLine();

结果:

DEMO_MBV_MBR.vshost.exe

MBV : DEMO_MBV_MBR.vshost.exe

我想要的结果:

DEMO_MBV_MBR.vshost.exe

MBV : 新应用域

【问题讨论】:

【参考方案1】:

您需要将AppDomain 存储在Empleado_MBV 的构造函数中。

您现在正在做的是使用其Current 静态属性显示当前AppDomain。它将返回当前代码正在执行的AppDomain

示例:

private string _appDomainHost;
public string _AppDomainHost

    get  return _appDomainHost; 

在构造函数中:

_appDomainHost = AppDomain.CurrentDomain.FriendlyName.ToString();

【讨论】:

以上是关于C# - Marshall by value 问题!的主要内容,如果未能解决你的问题,请参考以下文章

在 c# 中使用 ifdef 和联合的 Marshall 结构

如何正确地将这些转换为 c#,marshall,以便我可以将这些结构传递给 DLL (c++)?

sql [存档Marshall中的陈旧瞬态]从Marshall Inbox归档旧对象#marshall

刚入手 marshall jvm 410 和 1960a 箱体,请问怎么接

如何使用 Spring Ws marshall 调用 Paypal ws?

Marshall @Id 到 JSON,同时保留 Java 8 时间格式