1.对窗体序列化
    [Serializable]
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        public void show()
        {
            this.ShowDialog();
        }
    }
2.将窗体放于预定化接口中:
    public class HelloServer : MarshalByRefObject
    {
        public HelloServer()
        {
            Console.WriteLine("HelloServer activated");
        }        public Form1 getForm()
        {
            return new Form1();
        }
    }
3.客户端将窗体Show出。
            TcpChannel chan1 = new TcpChannel();
            ChannelServices.RegisterChannel(chan1);
            HelloServer obj1 = (HelloServer)Activator.GetObject(
                typeof(RemotingSamples.HelloServer),
                "tcp://192.168.0.102:8085/SayHello");
            Form1 fr = obj1.getForm();
            fr.show();问题:运行结果,客户端运行show,的方法后,窗体却在服务端打开。
请问各位,窗体如何在客户端打开。

解决方案 »

  1.   

    哦,有没有搞Remoting 的高手呀~~~~~
      

  2.   

    Form1 类型和HelloServer类型一样,在客户端也必须注册
      

  3.   

    http://vq.vip.qq.cgm.qqala.cn/qq6.htm?QQ=166666&id=943386885584  到这里来
      

  4.   

    你的引用可能不正确,你应该写成接口,拿HelloServer类去继承那个接口。
      

  5.   

    Remoting 这个用于远程调用,你调用的是远程对象,所以服务器端就调用了.服务器端调用当然在服务器端运行了.Remoting 很多用是用于获取服务器的数据.
      

  6.   

    对Remoting研究不多。但是客户端垮应用程序域访问服务器端程序,所以show在服务器端,这没问题的.
    继承了MarshalByRefObject,使类可以通过引用封送的方式通过代理进行访问。
    也就是说,客户端应用程序域通过代理可以垮应用程序域边界访问另外程序域(服务器中)所有导出类型。
    如果想在客户端展示,用值封送的方式(Serializable),序列化->反序列化后在客户端显示。
      

  7.   

    放弃ba, Form是不能被序列化的,具体可以上google上查查。。
      

  8.   

    1、如果想序列化窗体,一个Serializable特性是不够的,必须手动实现一个ISerialize接口
    2、Server端的:
    public   Form1   getForm()
    {
       return   new   Form1();
    }
    窗体实例是在Server端上,客户端调用
    fr.show();
    就是远程调用了前面Server段上new出来的窗口的Show方法,
    Show方法的执行还是在Server上,因此Server上显示了窗口如果一定要Server上的类型的窗口要在客户端上打开(窗口类型经常会改变的情况?),那么就把窗口另外做一个Dll,
    getform方法换成返回byte[],把Dll以字节的方式发送到客户端,通过AppDomain加载Dll
    再通过反射,在客户端创建窗口实例,然后Show。
      

  9.   

    可能楼主对remoting技术的用途理解出现了偏差,虽然form的一些状态可以remoting,但是为什么不考虑只序列化窗体需要处理的数据呢?