`
jimsonchoi
  • 浏览: 4061 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

MarshalByRefObject和Serializable

阅读更多

MarshalByRefObject和Serializable

最近在看web sevice 方面的东西,顺便看了下序列化,懂了不少啊 :

从MarshalByRefObject派生的类和有[Serializable]的类都可以跨越应用程序域作为参数传递。
从MarshalByRefObject派生的类按引用封送,有[Serializable]标志的类,按值封送。
如果此类即从MarshalByRefObject派生,也有[Serializable]标志也是按引用封送。

序列化有3种情况:

  1. 序列化为XML格式:
    在webservice里,写个web method,传个自定义类做参数,就是这种情况。系统会帮你搞定,把自定义的类转换为默认XML格式。
  2. 序列化为2进制:
    要加[Serializable]标志,可以把私有变量和公共变量都序列化。
  3. 序列化为soap格式:
    需要实现ISerializable接口,定义序列化函数ISerializable.GetObjectData,和还原序列化的构造函数。
    一个soap参数类的sample:
[Serializable]
    
public class serialze:ISerializable 
    
{
        
// 序列化函数,由 SoapFormatter 在序列化过程中调用
        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext
            ctxt)
        
{
            
// 向 SerializationInfo 对象中添加每个字段
            info.AddValue("UserName", UserName);
            info.AddValue(
"UserID",UserID);
        }


        
// 还原序列化构造函数,由 SoapFormatter 在还原序列化过程中调用
        public serialze(SerializationInfo info, StreamingContext ctxt)
        
{
            
// 从 SerializationInfo 对象中还原序列化出各个字段
            UserName = (string)info.GetValue("UserName"typeof(string));
            UserID 
= (int) info.GetValue("UserID",typeof(int));
        }

  
        
public serialze()
        
{}

        
public string UserName;
        
public int UserID;
    }
分享到:
评论

相关推荐

    remoting简单通讯

    3. **对象类型**:Remoting支持两种类型:MarshalByRefObject和Serializable。MarshalByRefObject类的子类对象可以在进程间传递引用,而Serializable类的对象则可以被序列化和反序列化,从而在进程间传递数据。 4. ...

    .NET Remoting

    4. **对象类型**:Remoting支持两种类型——MarshalByRefObject和Serializable。MarshalByRefObject类型的对象可以在不同的应用程序域之间共享,其状态存储在服务器端;Serializable类型的对象可以完全序列化并跨...

    Serializable在C#中的作用.NET 中的对象序列化

    - 对于某些类型的对象,如`MarshalByRefObject`,它们默认实现了`ISerializable`接口。这意味着在序列化这类对象时需要特别注意处理跨域引用等问题。 #### 七、总结 对象序列化是.NET开发中一项重要的技术,能够...

    [Serializable]在C_中的作用-NET_中的对象序列化

    下面是一个简单的示例,展示了如何使用[Serializable]和BinaryFormatter进行序列化和反序列化: ```csharp [Serializable] public class MyObject { public int n1 = 0; public int n2 = 0; public string str =...

    简单的C# Remoting例子

    2. **实现远程接口**:创建一个类实现该接口,并添加`[Serializable]`和`[RemotingConfiguration]`特性,以表明它是远程对象。 ```csharp [Serializable] [RemotingConfiguration(RemoteObjectLifetime = ...

    Remorting服务C#示例

    1. **设置远程对象**: 在服务端,我们需要定义一个公共类,并将其标记为`[Serializable]`以允许序列化,同时使用`[RemotingServices.Marshal]`或`[MarshalByRefObject]`特性来标记这个类,表示它可以作为远程对象...

    C# remoting接口实现简单示例

    在本示例中,我们将深入理解C# Remoting的基本概念,以及如何创建和使用一个简单的Remoting接口。 首先,我们要明白C# Remoting的核心概念:透明的远程调用(Transparent Proxy)和服务器激活(Server Activation)...

    remoting小例子

    需要注意的是,虽然.NET Remoting在早期的.NET Framework版本中是一个重要的通信技术,但在.NET Core和更新的.NET框架中,已经被其他技术如WCF(Windows Communication Foundation)和更现代的API如gRPC、SignalR所...

    Remoting简单远程对象实例

    `[Serializable]`特性则允许对象在跨应用程序域或进程时进行序列化和反序列化。 接下来,你需要在服务器端激活这个远程对象,并将其暴露给客户端。这通常通过通道服务来完成,如TCP通道或HTTP通道: ```csharp ...

    .net remoting 技术实例精解

    public class MyRemoteService : MarshalByRefObject, IMyRemoteService { public void DoSomething() { Console.WriteLine("Doing something on the server."); } } ``` 3. 配置服务器:设置服务器端的通道和...

    Remoting实例C#

    接口应该使用`[Serializable]`和`[InterfaceType(ComInterfaceType.InterfaceIsDual)]`属性标记,以确保它可以被序列化并支持双向通信。 2. **实现远程接口**:接下来,创建一个类来实现定义的接口。这个类应该使用...

    remoting 实例

    在本实例中,我们将深入探讨Remoting的服务器端和客户端激活实例的实现。 首先,我们要理解.NET Remoting的基础概念。Remoting的核心是通道,它负责在网络间传输数据。常见的通道有TCP、HTTP等,可以根据需求选择...

    c# Remoting 实现进程间互相调用 并传递消息

    C# Remoting是.NET Framework提供的一种跨进程通信技术,它允许不同进程间的对象互相调用方法,实现分布式系统中的组件交互。...不过,对于已有的基于C# Remoting的系统,理解和掌握其工作原理仍然是维护和升级的关键。

    Net Remoting 入门与提高

    为了使对象可远程访问,还需要使用Attribute标记来指定其配置信息,例如[Serializable]用于序列化,[RemotingConfiguration.ApplicationName]用于定义应用名称。 三、服务器端 在服务器端,我们需要创建并激活远程...

    remoting 例子

    然后,我们使用[RemotingServices]和[MarshalByRefObject]类将对象暴露为远程对象。在服务器端,我们需要启动一个服务器,监听特定端口并注册远程对象。客户端则通过配置通道(如TCP或HTTP)连接到服务器,并通过...

    WinForm客户端向服客端发送消息示例

    [Serializable] public class ServerSide : MarshalByRefObject { public void StartServer() { var url = "tcp://localhost:8080/MessageSender"; ChannelServices.RegisterChannel(new TcpChannel(), false); ...

    C#Remoting超简单实例

    例如,你可以有一个名为`MyRemoteClass`的类,它实现`IMyRemoteInterface`接口,并且使用`[Serializable]`和`[RemotingConfiguration.ApplicationName("MyApp")]`等属性进行标记。 2. **服务器启动**:在服务器端,...

    Remoting服务器端轻松实现

    这个对象可以是自定义的类,该类需要标记为`[Serializable]`,确保其状态可以在网络传输过程中被正确处理。接着,使用`[assembly:AssemblyVersion()]`和`[assembly:AssemblyFileVersion()]`来指定版本信息,以便...

    Net Remoting实现简单的服务端客户端双向通信

    public class RemoteServiceImpl : MarshalByRefObject, IRemoteService { public string SendMessage(string message) { return $"Service received: {message}"; } } ``` 3. **注册服务**:在服务端,我们需要...

    使用Remoting编写聊天程序

    public class MessageServiceImpl : MarshalByRefObject, IMessageService { // 实现接口的方法 } // 在服务器端启动Remoting服务 ChannelServices.RegisterChannel(new TcpChannel()); RemotingConfiguration....

Global site tag (gtag.js) - Google Analytics