Remoting给远程对象属性赋值.....望大家来帮个忙,严究两天未解

snyl 2007-06-14 03:50:26

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());
...全文
835 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
snyl 2007-06-14
  • 打赏
  • 举报
回复
非常感谢....


ERPCoder 2007-06-14
  • 打赏
  • 举报
回复
远程对象激活模式不对.
下面是我写的一个简单例子:
类:
[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);
}
}
wzd24 2007-06-14
  • 打赏
  • 举报
回复
我晕,我看我是帮不了你了!
snyl 2007-06-14
  • 打赏
  • 举报
回复
放在那里面就说上下文不存在RemotingConfiguration
又无法加添加命名空间

我感觉不是重复执行那个语句的事,因为第一次调用那个语句就出错了

你能否加下我的Q:410125
wzd24 2007-06-14
  • 打赏
  • 举报
回复
你的ASP.NET不是有一个Global.asax文件吗??
里面就有Application_Start()。
snyl 2007-06-14
  • 打赏
  • 举报
回复
...................................................
有人熟悉Remoting吗?
wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴)还在????
...................................................
snyl 2007-06-14
  • 打赏
  • 举报
回复
-_-!
snyl 2007-06-14
  • 打赏
  • 举报
回复
OnStart这个事件,不是只有服务里才有的吗?

我端户端用的是网页的格式...

我的服务端是个windows服务

客户端,网页
wzd24 2007-06-14
  • 打赏
  • 举报
回复
晕倒,你还是把它放到Application_OnStart事件里去吧!
snyl 2007-06-14
  • 打赏
  • 举报
回复
用什么方法都好

我只想实现,可以改变远程对象的属性值.就可以.远程对象的构造函数中有初始化值.


给我个简单的例子,万分感谢.
snyl 2007-06-14
  • 打赏
  • 举报
回复
我把他加在 if (!IsPostBack)
{}

仍然出现同样的错误..

terry_12 2007-06-14
  • 打赏
  • 举报
回复
Singleton
用单例模式
wzd24 2007-06-14
  • 打赏
  • 举报
回复
RemotingConfiguration.RegisterActivatedClientType(typeof(wr), "tcp://127.0.0.1:8086/hi");这行代码只能被执行一次,你应该把它放在一个静态构函数里面。以保证它只被执行一次!
snyl 2007-06-14
  • 打赏
  • 举报
回复
我一用客户端激活方式,就提示错误:试图重定向类型“wr, App_Code.sogovhfq”的激活,而该类型已被重定向。

RemotingConfiguration.RegisterActivatedClientType(typeof(wr), "tcp://127.0.0.1:8086/hi");//这行
snyl 2007-06-14
  • 打赏
  • 举报
回复
应该如何调用??????
wzd24 2007-06-14
  • 打赏
  • 举报
回复
客户端不是这样用的!
snyl 2007-06-14
  • 打赏
  • 举报
回复

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());

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧