This topic has been archived. It cannot be replied.
-
工作学习 / 专业技术讨论 / 这里有对 .Net Remoting 比较了解的吗?我刚开始用,有个问题想请教一下。
-holdon(again);
2006-9-25
(#3229123@0)
-
什么问题?会不会先看看
-binghongcha76(一只大猫);
2006-9-25
(#3229139@0)
-
I will show my code below:
-holdon(again);
2006-9-26
{1797}
(#3229849@0)
-
我试着猜想一下:在Romoting中连续两次注册端口会抛出异常,你说的情况(2次快速访问页面)等于连续2次执行Client端的代码,这样...第一次的代码因为Sleeping的原因还没有执行UnregisterChannel()函数,第二次点击又要执行一次RegisterChannel()函数,这样会抛出异常.
我一般是设置一个判断,如果注册的channel数目==0则注册端口,否则直接执行剩下的remoting语句,如下:
if (ChannelServices.RegisteredChannels.Length == 0)
{
HttpChannel hChannel = new HttpChannel();
ChannelServices.RegisterChannel(hChannel, true);
}
可能是这个原因,你试试,这是我的第一反应,我也没根据你的情况作试验
-binghongcha76(一只大猫);
2006-9-26
{481}
(#3230054@0)
-
多谢多谢。真的是这个问题。不过不知道为什么application 中就没问题。我现在还是照猫画虎,对Remoting 里的细节都不了解。
-holdon(again);
2006-9-26
(#3230086@0)
-
你说的第一种情况,每一个单独的进程remoting会单独的分配一个channel,虽然你的2个程序完全一样,但它们是2个完全独立的进程,同时运行windows会分配不同的channel号给这2个进程。所以不会抛出异常但是ASP.NET不一样,它实际上是一个进程,你刷新2次页面实际上是在2次执行同一个程序里的函数,这样remoting看到channel已经被注册过一次就会抛出异常
还有你的Server端应该用的是Singleton模式吧,我看到2个程序同时运行打印出来的数字前后关联变化。这种模式下无论有几个client连接Server,在Server端实际上只有一个线程在运行,返回的变量也是同一个变量,也就会造成不同的Client看到的不是相同的结果
-binghongcha76(一只大猫);
2006-9-26
{378}
(#3230155@0)
-
对,是Singleton,我本来是在测Singleton和singlecall的区别。server肯定只有一个Remoting Object, 不过说到single thread,我觉得还有疑问。运行一个client application, 耗时5秒。
几乎同时运行3个client application, 3个几乎同时结束,各耗时6秒。如果是单线程,应该是15秒左右阿。应该是3个线程访问共同的数据。
-holdon(again);
2006-9-26
{163}
(#3230274@0)
-
正确的做法是什么呢?是不是干脆就不UnregisterChannel?反正以后还要用。
-holdon(again);
2006-9-26
(#3230089@0)
-
还有一个问题,ChannelServices.RegisteredChannels.Length>0恐怕不能断定我的channel已经registed吧,比如其它application创建其它channel... 看来有必要写个函数来查channel名。
-holdon(again);
2006-9-26
(#3230096@0)
-
找到原因,http://msdn2.microsoft.com/en-us/library/ms223155.aspx, channel 是基于app level的。多谢了。
-holdon(again);
2006-9-26
(#3230125@0)
-
No Problem... ^_^
-binghongcha76(一只大猫);
2006-9-26
(#3230166@0)