C# 我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到插座

C# 我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到插座,c#,sockets,websocket,wampsharp,C#,Sockets,Websocket,Wampsharp,我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到套接字。下面是我为连接逻辑编写的代码,如果连接断开或出现错误,则重新连接 public static async Task WampConnect(String uri, String kafkaTopic, String subscribeTopic) { log.Info("Entering to WampConnect method: "

我正在使用wampsharpclient连接到websocket。如果断开连接,我无法重新连接到套接字。下面是我为连接逻辑编写的代码,如果连接断开或出现错误,则重新连接

public static async Task WampConnect(String uri, String kafkaTopic, String subscribeTopic)
            {
                log.Info("Entering to WampConnect method: " + Thread.CurrentThread.ManagedThreadId + " - " + kafkaTopic);
                await Task.Run(async () =>
                {
                    DefaultWampChannelFactory factory = new DefaultWampChannelFactory();
                    IWampChannel channel = factory.CreateJsonChannel(uri, "realm1");
                    IWampRealmProxy realmProxy = channel.RealmProxy;
                    await channel.Open();
                    var retry = true;
                    channel.RealmProxy.Monitor.ConnectionError +=  async(sender, args) =>
                    {
                        log.Info("Error Reason: " + args.Exception + " - Reconnecting");
                        retry = true;
                       while (retry)
                        {
                            factory = new DefaultWampChannelFactory();
                            channel = factory.CreateJsonChannel(uri, "realm1");
                            realmProxy = channel.RealmProxy;
                            await channel.Open();
                            //await Task.Delay(2000);
                        }
                    };
                    channel.RealmProxy.Monitor.ConnectionEstablished +=
                        (sender, args) =>
                        {
                            retry = false;
                            log.Info("connected session with ID " + args.SessionId);
                            IWampSubject topic = realmProxy.Services.GetSubject(subscribeTopic);
                            IDisposable disposable = topic.Subscribe(
                                async serializedEvent =>
                                {
                                    Object arguments = null;

                                    if (subscribeTopic.Equals("ticker"))
                                    {
                                        String[] tickerData = serializedEvent.Arguments.Select(argument => argument.Deserialize<String>()).ToArray();
                                        arguments = string.Join(",", tickerData);

                                    }
                                    else
                                    {
                                        arguments = serializedEvent.Arguments.Select(argument => argument.Deserialize<JObject>()).ToArray<JObject>();

                                    }
                                    await SendToKafka(arguments, kafkaTopic);
                                }
                                );
                        };

                    channel.RealmProxy.Monitor.ConnectionBroken +=  (sender, args) =>
                    {
                        log.Info("Disconnected Reason: " + args.Reason + " - Reconnecting");
                        retry = true;
                        /*while(retry)
                        {
                            factory = new DefaultWampChannelFactory();
                            channel = factory.CreateJsonChannel(uri, "realm1");
                            realmProxy = channel.RealmProxy;
                            await channel.Open();
                            await Task.Delay(2000);
                        }*/

                    };
                });
                // log.Info("Exiting  WampConnect method: " + Thread.CurrentThread.ManagedThreadId + " - " + kafkaTopic);

            }
公共静态异步任务WampConnect(字符串uri、字符串kafkaTopic、字符串subscribeTopic)
{
log.Info(“进入WampConnect方法:“+Thread.CurrentThread.ManagedThreadId+”-“+kafkaTopic”);
等待任务。运行(异步()=>
{
DefaultWampChannelFactory=新的DefaultWampChannelFactory();
IWampChannel=factory.CreateJsonChannel(uri,“realm1”);
IWampRealmProxy realmProxy=通道.realmProxy;
等待频道打开();
var retry=true;
channel.RealmProxy.Monitor.ConnectionError+=异步(发送方,参数)=>
{
log.Info(“错误原因:+args.Exception+”-重新连接”);
重试=真;
while(重试)
{
工厂=新的默认WAMPChannelFactory();
channel=factory.CreateJsonChannel(uri,“realm1”);
realmProxy=channel.realmProxy;
等待频道打开();
//等待任务。延迟(2000);
}
};
channel.RealmProxy.Monitor.Connection已建立+=
(发送方,args)=>
{
重试=错误;
log.Info(“ID为“+args.SessionId的已连接会话”);
IWampSubject topic=realmProxy.Services.GetSubject(subscribeTopic);
IDisposable=topic.Subscribe(
异步序列化devent=>
{
对象参数=null;
if(subscribeTopic.Equals(“ticker”))
{
String[]tickerData=serializedEvent.Arguments.Select(参数=>argument.Deserialize()).ToArray();
参数=string.Join(“,”,tickerData);
}
其他的
{
arguments=serializedEvent.arguments.Select(参数=>argument.Deserialize()).ToArray();
}
等待SendToKafka(争论,卡夫卡托克);
}
);
};
channel.RealmProxy.Monitor.ConnectionBreaked+=(发送方,参数)=>
{
log.Info(“断开连接的原因:+args.Reason+”-重新连接”);
重试=真;
/*while(重试)
{
工厂=新的默认WAMPChannelFactory();
channel=factory.CreateJsonChannel(uri,“realm1”);
realmProxy=channel.realmProxy;
等待频道打开();
等待任务。延迟(2000);
}*/
};
});
//log.Info(“正在退出WampConnect方法:“+Thread.CurrentThread.ManagedThreadId+”-“+kafkaTopic”);
}

请阅读WampSharp wiki中的WampChannelReconnector机制,并尝试使用它。您解决了吗?