C# 注册指定的System.MarshallByRefObject以获得赞助期间的.net远程处理大约需要2-4分钟

C# 注册指定的System.MarshallByRefObject以获得赞助期间的.net远程处理大约需要2-4分钟,c#,.net,C#,.net,在注册MarshallByRefObject以获得赞助时,我面临一个问题。 调用主赞助商。注册(主)进行注册时,大约需要2-4分钟为赞助商注册MasterManager对象。不知道为什么要花时间。 有谁能帮我解释一下为什么注册客户赞助人课程的方法需要花更多的时间为赞助人注册MarshallByRefObject private MasterManager GetMasterManager() { Log.WriteLine(logSource, "GetMasterMan

在注册MarshallByRefObject以获得赞助时,我面临一个问题。 调用主赞助商。注册(主)进行注册时,大约需要2-4分钟为赞助商注册MasterManager对象。不知道为什么要花时间。 有谁能帮我解释一下为什么注册客户赞助人课程的方法需要花更多的时间为赞助人注册MarshallByRefObject

private MasterManager GetMasterManager()
    {
        Log.WriteLine(logSource, "GetMasterManager", LogLevel.Trace, 5);

        MasterManager master = null;

        // Check MasterManager register
        bool registered = false;
        WellKnownClientTypeEntry[] wkcte = RemotingConfiguration.GetRegisteredWellKnownClientTypes();
        foreach (WellKnownClientTypeEntry entry in wkcte)
        {
            if (entry.TypeName.Equals(MasterManagerType))
            {
                registered = true;
                break;
            }
        }

        // Create MasterManager remote instance
        if (!registered)
            RegisterMasterManager();
        if ((master = new MasterManager()) == null)
            throw new RemotingException("Remote object not found: MasterManager.");

        // Set Lifetime control for remote instance
        masterSponsor = new ClientSponsor(TimeSpan.FromSeconds(MasterManager.LifeTimeRenewal));

        masterSponsor.Register(master);

        // Set Lifetime control for remote events
        LifetimeServices.LeaseTime = TimeSpan.FromDays(90);
        LifetimeServices.RenewOnCallTime = TimeSpan.FromDays(90);

        return master;
    }



/// <summary>
        /// Register MasterManager in the Remoting infrastructure.
        /// </summary>
        private void RegisterMasterManager()
        {
            Log.WriteLine(logSource, ">>> RegisterMasterManager", LogLevel.Trace, 5);

            // Get configuration file full path
            string configFile = ConfigFolder + RemotingConfigurationFile;
            if (File.Exists(configFile))
            {
                // Configure Remoting from file
                RemotingConfiguration.Configure(configFile, false);
            }
            else
            {
                // Use Remoting default configuration
                Log.WriteLine(logSource, "Remoting configuration for Management not found. Using default.", LogLevel.Trace, 5);

                // Creating a custom formatter for a Channel sink chain.
                BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
                BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
                serverProvider.TypeFilterLevel = TypeFilterLevel.Full;

                // Creating the IDictionary to set the port on the channel instance.
                IDictionary channelProps = new Hashtable();
                channelProps["ref"] = "http";
                channelProps["port"] = 0;

                // Pass the properties for the port setting and the server provider in the server chain argument.
                HttpChannel channel = new HttpChannel(channelProps, clientProvider, serverProvider);

                // Register remote MasterManager
                ChannelServices.RegisterChannel(channel, false);
                RemotingConfiguration.RegisterWellKnownClientType(typeof(MasterManager), MasterManagerDefaultUrl);
            }

            Log.WriteLine(logSource, "<<< RegisterMasterManager", LogLevel.Trace, 5);
        }
private MasterManager GetMasterManager()
{
Log.WriteLine(logSource,“GetMasterManager”,LogLevel.Trace,5);
MasterManager master=null;
//检查主管理器寄存器
bool注册=假;
WellKnownClientTypeEntry[]wkcte=RemotingConfiguration.GetRegistereAllownClientTypes();
foreach(wkcte中的Wellknown客户类型输入)
{
if(entry.TypeName.Equals(MasterManagerType))
{
注册=真实;
打破
}
}
//创建MasterManager远程实例
如果(!已注册)
RegisterMasterManager();
if((master=new MasterManager())==null)
抛出新的RemotingException(“未找到远程对象:MasterManager”);
//为远程实例设置生存期控制
主赞助商=新客户赞助商(TimeSpan.FromSeconds(MasterManager.LifeTime续订));
主办方。注册(主办方);
//设置远程事件的生存期控制
LifetimeServices.LeaseTime=TimeSpan.FromDays(90);
LifetimeServices.RenewOnCallTime=TimeSpan.FromDays(90);
返回主机;
}
/// 
///在远程处理基础结构中注册MasterManager。
/// 
私有无效注册表管理器()
{
Log.WriteLine(logSource,“>>>RegisterMasterManager”,LogLevel.Trace,5);
//获取配置文件完整路径
字符串configFile=ConfigFolder+RemotingConfigurationFile;
if(File.Exists(configFile))
{
//从文件配置远程处理
RemotingConfiguration.Configure(configFile,false);
}
其他的
{
//使用远程处理默认配置
Log.WriteLine(logSource,“未找到管理的远程配置。使用默认值)”,LogLevel.Trace,5);
//为通道接收器链创建自定义格式设置程序。
BinaryClientFormatterSinkProvider clientProvider=新的BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProvider=新的BinaryServerFormatterSinkProvider();
serverProvider.TypeFilterLevel=TypeFilterLevel.Full;
//创建IDictionary以设置通道实例上的端口。
IDictionary channelProps=新哈希表();
channelProps[“ref”]=“http”;
channelProps[“端口”]=0;
//在服务器链参数中传递端口设置和服务器提供程序的属性。
HttpChannel=新的HttpChannel(channelProps、clientProvider、serverProvider);
//注册远程主管理器
ChannelServices.RegisterChannel(channel,false);
RemotingConfiguration.RegisterWellKnownClientType(typeof(MasterManager),MasterManagerDefaultUrl);
}

Log.WriteLine(logSource),“您是否分析了您的代码,以便准确地知道时间在哪里?它挂在哪一行上?客户端机器ping服务器需要多长时间?MasterConsponder.Register(master)这一行需要更多的时间。大约需要2-4分钟。如果你从客户端ping服务器,你会得到快速响应吗?还是需要很长时间才能返回?两者都在同一台机器上……你是否分析了你的代码以便准确地知道时间在哪里?它挂在哪一行上?客户端机器ping需要多长时间服务器?主发起人。注册(主)这一行需要更多时间。大约需要2-4分钟。如果从客户端ping服务器,您会得到快速响应吗?还是需要很长时间才能返回?两者都在同一台机器上。。。。。