public class wr:MarshalByRefObject
{
public ftpname;public wr()
{
ftpname="aaa";}
public string addnew()
{
return ftpname;
}
}
服务端:               TcpServerChannel channel = new TcpServerChannel(8086);
                ChannelServices.RegisterChannel(channel,false);
            
          RemotingConfiguration.RegisterWellKnownServiceType(typeof(Hosts), "hi", WellKnownObjectMode.SingleCall);
客户端:
          wrwr= (Hosts)Activator.GetObject(typeof(wr), "tcp://127.0.0.1:8046/hi");
        wr.ftpname = "22222";
Response.Write(wr.addnew());使用这种方法却实可以调用远程对象,但是这种方法调用远程对象的时候就实例化构造函数.所以ftpname的值永远都是默认构造函数的aaa,没有办法在客户端给值.在网上找了很久发现可以用客户端激活方式,但是总是出错不知道为什么服务端:
                TcpServerChannel channel = new TcpServerChannel(8086);
                ChannelServices.RegisterChannel(channel,false);
            //客户激活模式
                RemotingConfiguration.ApplicationName = "hi";
                RemotingConfiguration.RegisterActivatedServiceType(typeof(wr));
客户端:
       RemotingConfiguration.RegisterActivatedClientType(typeof(wr), "tcp://127.0.0.1:8086/hi");
        wr obj = new wr();
wr.ftpname="2222";
Response.Write(wr.addnew());

解决方案 »

  1.   


    public class wr:MarshalByRefObject
    {
    public ftpname;public wr()
    {
    ftpname="aaa";}
    public string addnew()
    {
    return ftpname;
    }
    }
    服务端:               TcpServerChannel channel = new TcpServerChannel(8086);
                    ChannelServices.RegisterChannel(channel,false);
                
              RemotingConfiguration.RegisterWellKnownServiceType(typeof(wr), "hi", WellKnownObjectMode.SingleCall);
    客户端:
              wr obj= (wr)Activator.GetObject(typeof(wr), "tcp://127.0.0.1:8046/hi");
            obj.ftpname = "22222";
    Response.Write(obj.addnew());使用这种方法却实可以调用远程对象,但是这种方法调用远程对象的时候就实例化构造函数.所以ftpname的值永远都是默认构造函数的aaa,没有办法在客户端给值.在网上找了很久发现可以用客户端激活方式,但是总是出错不知道为什么服务端:
                    TcpServerChannel channel = new TcpServerChannel(8086);
                    ChannelServices.RegisterChannel(channel,false);
                //客户激活模式
                    RemotingConfiguration.ApplicationName = "hi";
                    RemotingConfiguration.RegisterActivatedServiceType(typeof(wr));
    客户端:
           RemotingConfiguration.RegisterActivatedClientType(typeof(wr), "tcp://127.0.0.1:8086/hi");
            wr obj = new wr();
    obj .ftpname="2222";
    Response.Write(obj .addnew());
      

  2.   

    我一用客户端激活方式,就提示错误:试图重定向类型“wr, App_Code.sogovhfq”的激活,而该类型已被重定向。 RemotingConfiguration.RegisterActivatedClientType(typeof(wr), "tcp://127.0.0.1:8086/hi");//这行
      

  3.   

    RemotingConfiguration.RegisterActivatedClientType(typeof(wr), "tcp://127.0.0.1:8086/hi");这行代码只能被执行一次,你应该把它放在一个静态构函数里面。以保证它只被执行一次!
      

  4.   

    我把他加在  if (!IsPostBack)
            {}仍然出现同样的错误..
      

  5.   

    晕倒,你还是把它放到Application_OnStart事件里去吧!
      

  6.   

    OnStart这个事件,不是只有服务里才有的吗?我端户端用的是网页的格式...我的服务端是个windows服务客户端,网页
      

  7.   

    ...................................................
    有人熟悉Remoting吗?
    wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴)还在????
    ...................................................
      

  8.   

    你的ASP.NET不是有一个Global.asax文件吗??
    里面就有Application_Start()。
      

  9.   

    放在那里面就说上下文不存在RemotingConfiguration
    又无法加添加命名空间我感觉不是重复执行那个语句的事,因为第一次调用那个语句就出错了你能否加下我的Q:410125
      

  10.   

    远程对象激活模式不对.
    下面是我写的一个简单例子:
    类:
    [Serializable]
        public class Calculator : MarshalByRefObject
        {
            public Calculator()
            {
                
            }        public int Sum(int x, int y)
            {
                return x + y;
            }
        }
    服务器端:
    class Server
        {
            static void Main(string[] args)
            {
                ChannelServices.RegisterChannel(new TcpChannel(4006), false);            RemotingConfiguration.RegisterWellKnownServiceType(typeof(Calculator)
                    , "Calculator.rem", WellKnownObjectMode.Singleton);  // 重点地方            Console.WriteLine("运行中...");
                Console.ReadLine();
            }
        }
    客户端:
    class Client
        {
            static void Main(string[] args)
            {
                Calculator calcu = (Calculator)Activator.GetObject(typeof(Calculator), "tcp://localhost:2560/Calculator.rem");
                
                int sum = calcu.Sum(5, 6);
                Console.WriteLine(sum);
            }
        }