C# 如何确定远程处理通道是否已注册

C# 如何确定远程处理通道是否已注册,c#,.net,remoting,C#,.net,Remoting,在我的ASP.NET应用程序中,全局应用程序启动事件中有一行通过调用RemotingConfiguration.Configure()配置客户端远程处理通道 这在第一次运行时效果很好,但当我的web应用程序被回收时,应用程序启动事件将再次触发,导致以下远程处理异常: 远程处理配置失败,出现异常“System.Runtime.Remoting.RemotingException”:通道“tcp”已注册 我想检测通道是否已配置,以避免出现此异常。但是如果发现通道已注册,您会怎么做 无论如何,我只是想

在我的ASP.NET应用程序中,全局应用程序启动事件中有一行通过调用RemotingConfiguration.Configure()配置客户端远程处理通道

这在第一次运行时效果很好,但当我的web应用程序被回收时,应用程序启动事件将再次触发,导致以下远程处理异常:

远程处理配置失败,出现异常“System.Runtime.Remoting.RemotingException”:通道“tcp”已注册


我想检测通道是否已配置,以避免出现此异常。

但是如果发现通道已注册,您会怎么做


无论如何,我只是想确保您知道.NET远程处理已被弃用,取而代之的是WCF。

试试ChannelServices.RegisteredChannel


我也有这个问题

问题是,您可以停止名为RemotingConfiguration.Configure()的应用程序,但这不会使通道可用。这与端口有关,或者可能只是频道的名称,我不确定

我发现似乎有效的解决方案是获取已注册的频道并注销要删除的频道

这里有一些代码

RemotingConfiguration.Configure(appConfig, false);

// do this to unregister the channel
IChannel[] regChannels = ChannelServices.RegisteredChannels;
IChannel channel = (IChannel)ChannelServices.GetChannel(regChannels[0].ChannelName);

ChannelServices.UnregisterChannel(channel);

RemotingConfiguration.Configure(appConfig, false); // this is just a test to see if we get an error

我希望这对您有效,对我来说是

如果我知道它已经注册了,我不会调用RemotingConfiguration.Configure()以避免出现异常。但它不会注册到您,是吗?它会注册到我们的软件。我的猜测是,在我们第一次注册远程处理通道时,它将被注册为w3wp.exe进程。由于web应用程序回收时进程不会重新启动,因此来自application_start事件的第二次配置调用会导致异常。您尝试过吗?因为我打赌注册会对每个AppDomain生效。我打赌它涉及远程类型和要实例化的代理类型(而不是它们)之间的数据结构映射。此外,进程对.NET没有多大关系。大多数事情都是在AppDomain和Thread方面。感谢您在这方面的帮助。我可以通过重新构建我的应用程序,然后从浏览器刷新来可靠地重复这种行为。我可以看到应用程序被重新启动,异常被抛出。顺便说一句,这是我在IIS7中看到的一个集成管道(我是新手)。我不记得在以前版本的IIS中看到过这个。谢谢John。这就是我要找的。