zoukankan      html  css  js  c++  java
  • ASP.NET通过Remoting service上传文件

    我们通常有三种方式来使用remoting,一种是

    第一种:Publishing a public object
    公开的对象创建在本地
    第二种:Remote creation of a public object (SAO)
    对象创建在客户端请求中
    第三种:Remote creation of a private object (CAO)
    对象创建在HOST上,客户端引用服务器上的对象

    目次我也没有很好理解这三种的本质区别在哪里。而这三种方式的remoting创建方式也不相同。

    第一种方式
    Host:
    ChannelServices.RegisterChannel (new TcpChannel(1500));
    cTransfer Trans = new cTransfer();
    RemotingServices.Marshal (Trans, "TestService");Client:
    cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
                                     "tcp://host:1500/TestService");
    第二种方式
    Host:
    ChannelServices.RegisterChannel (new TcpChannel(1500));
    RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
        "TestService", WellKnownObjectMode.Singleton);Client:
    cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
                                     "tcp://host:1500/TestService");
    第三种方式
    Host:
    ChannelServices.RegisterChannel (new TcpChannel(1500));
    RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Client:
    object[] attr = {new UrlAttribute("tcp://host:1500")};
    object[] args = {"Sample constructor argument"};
    cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
    如果我们需要一个对象(object)允许远程调用处理,那么这个对象(object)需要继承于MarshalByRefObject这个类。

    如何在remoting中传送文件呢?基本思路就是在client打开client的文件,转换在Byte[]类型之后调用host的对象。
    Client与Host之间传送的对象
    [Serializable]
        public struct kAction
        {
            public string filename;
            public byte[] context;       
           
        };打开文件,将流字节保存到Context中去
    Stream  fileStream=File.Open(this.transFileName.Text,FileMode.Open);
                fileStream.Position=0;
                byte[] Content = new byte[((int) fileStream.Length) + 1];
                fileStream.Read(Content,0,Content.Length) ;
    在Host在读取到Kaction之后,把它保存到指定文件夹下面
    MemoryStream meoeryStream=new MemoryStream(k_Action.context);
                FileStream fileStream=new FileStream(@"d:\"+k_Action.filename,FileMode.Create);
                meoeryStream.WriteTo(fileStream);
                fileStream.Close();
                meoeryStream.Close();           
    发现不能在对象中又定义新的对象。在准备发送到HOST上会提示“包含潜在危险的类型”。
    [Serializable]
        public struct kAction
        {
            public string filename;
            public byte[] context;
                    public FineInfo fileInfo;//这里

        };
    记录一下自己的心得。有空我会好好整理下下回做篇完整点的。

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/xiyou110/p/1998814.html
Copyright © 2011-2022 走看看