如何取消RemotingConfiguration.RegisterActivatedClientType的注册类型,或有其它方法吗?

popcorn 2005-01-16 04:56:23
在程序中使用
RemotingConfiguration.RegisterActivatedClientType(typeof(SomeType),"tcp://"+serverAddr+":"+serverPort);
这时候我需要连接到另外一台服务器(地址改变),难道必须要将程序关闭再重新启动才能继续使用这个方法吗?
否则会提示异常:“试图重定向类型“SomeType, WinSys”的激活,而该类型已被重定向。"

有没有象ChannelServices.UnregisterChannel一样的方法可以注销注册,或者有没有其它办法可以让我在程序启动后切换服务器地址呢?
...全文
1088 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
claus2001 2005-08-10
  • 打赏
  • 举报
回复
mark
深宇 2005-08-09
  • 打赏
  • 举报
回复
:)
777kit 2005-06-29
  • 打赏
  • 举报
回复
mark
izzard 2005-04-06
  • 打赏
  • 举报
回复
mark
lcg200x 2005-03-14
  • 打赏
  • 举报
回复
www.moblog.net.cn/sunshine.com
分布式的通用平台
速马 2005-01-24
  • 打赏
  • 举报
回复
popcorn,如果这么写:

[UrlAttribute("tcp://...")]
public RemoteClass : SomeClass {}

是不是就已经得到了Remoting的效果?(我这里的试验结果是完全行不通 @_@)
(我是说这样就无须使用RemotingConfiguration.RegisterActivatedClientType来做,不是指动态改变地址的问题)
popcorn 2005-01-18
  • 打赏
  • 举报
回复
多谢各位的参与,现在暂时采用了下面的方法来解决问题:
SomeClass cls;
if(isRemoting){
string url = "tcp://"+server+":"+port.ToString();
System.Runtime.Remoting.Activation.UrlAttribute urlattr = new System.Runtime.Remoting.Activation.UrlAttribute (url);
object[] args = "test"; //这里是构造函数传的参数
object[] attrs = {urlattr};
cls = (SomeClass)Activator.CreateInstance(typeof(SomeClass),args,attrs);
}
else{
cls = new SomeClass("test");
}
elite2018 2005-01-18
  • 打赏
  • 举报
回复
咨询了MS工程师,答复:

目前的这是一个产品限制,不过会继续不断改进我们的产品。
另外,您可以把您的需求发到mswish网站,我们有专门的人员会评估您的需求,并考虑在以后的产品中加上这个功能。
http://register.microsoft.com/mswish/suggestion.asp
saucer 2005-01-17
  • 打赏
  • 举报
回复
this post might help you, he uses Activator.CreateInstance

http://groups-beta.google.com/group/microsoft.public.dotnet.framework.remoting/msg/6a481f80c310a34c
Fibona 2005-01-17
  • 打赏
  • 举报
回复
不清楚.
turnmissile 2005-01-17
  • 打赏
  • 举报
回复
抱歉,我上面的注册channel号应该和后面的channel号相同.代码只是我代码中的一段截取,不详细的地方还要可以和我联系.

另外使用Activator的GetObject就能够取代你上面的那个操作中new的作用,并且能够自行指定url.
turnmissile 2005-01-17
  • 打赏
  • 举报
回复
如果你希望链接不同的服务端,可以用下面的方法,不需要锁死再一种方法上面.只要改动GetObject中第二个参数就可以了.
RegisterChannel(8090);

//on server end
// Publish the server as a well known object
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteClassLibrary.RemoteService),"RemoteServer", WellKnownObjectMode.Singleton);

//on client end
_RO = (RemoteService)Activator.GetObject(typeof(RemoteClassLibrary.RemoteService),"tcp://MyComputer:9000/RemoteServer");

popcorn 2005-01-17
  • 打赏
  • 举报
回复
因为我必须要new一个对象,有没有什么办法在程序运行中动态改变服务器呢?
nga96 2005-01-17
  • 打赏
  • 举报
回复
偶没用过,呵。顶
elite2018 2005-01-17
  • 打赏
  • 举报
回复
mark
popcorn 2005-01-17
  • 打赏
  • 举报
回复
因为我考虑到中间对象要既可以在本地使用,也可以在远程使用,所以用new是最好的,基本上不用调整原来的架构.
saucer和 turnmissile的方法都可以参考,偶也曾想过,但是还是因为不能使用new,只能将中间类的代码进行修改了.

现在还是希望能找到可以将远程对象进行new并且能改变动态连接的方法.
LoveCherry 2005-01-16
  • 打赏
  • 举报
回复
关注

110,534

社区成员

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

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

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