C# 在WCF wsDualHttpBinding上下文中跟踪客户端

C# 在WCF wsDualHttpBinding上下文中跟踪客户端,c#,wcf,wcf-binding,C#,Wcf,Wcf Binding,我在wcf服务中使用wsDualHttpBinding,并使用以下代码存储客户端通道: public static void Subscribe() { try { // Subscribe the guest to the beer inventory var guest = OperationContext.Current.GetCallbackChannel<ILoggingService

我在wcf服务中使用wsDualHttpBinding,并使用以下代码存储客户端通道:

    public static void Subscribe()
    {
        try
        {
            // Subscribe the guest to the beer inventory
            var guest = OperationContext.Current.GetCallbackChannel<ILoggingServiceCallBack>();

            if (!CallbackList.Contains(guest))
            {
                CallbackList.Add(guest);
            }
        }
        catch (Exception ex)
        {
            //do stuff
        }
        finally
        {
           //do stuff
        }

    }
publicstaticvoidsubscribe()
{
尝试
{
//向客人订阅啤酒清单
var guest=OperationContext.Current.GetCallbackChannel();
如果(!CallbackList.Contains(guest))
{
CallbackList.Add(guest);
}
}
捕获(例外情况除外)
{
//做事
}
最后
{
//做事
}
}
我会像那样给客户打电话:

        public static void LoggingCallBack(Action<ILoggingServiceCallBack> callbackNotification)
    {
        try
        {
            if (OperationContext.Current != null)
            {
                var guest = OperationContext.Current.GetCallbackChannel<ILoggingServiceCallBack>();
                if (!CallbackList.Contains(guest))
                {
                    CallbackList.Add(guest);
                }
            }

            foreach (var LoggingCallBack in CallbackList)
            {

       var temp = LoggingCallBack;
                try
                {
                    new Thread(() =>
                    {
                        try
                        {
                            callbackNotification(temp);
                        }
                        catch (Exception ex)
                        {
                            //do something
                        }
                    }).Start();


                }
                catch (Exception ex)
                {
                    //do somethin
                }
            }
        }
        catch (Exception ex)
        {
            //doing something
        }
        finally
        {
         //doing something
        }
    }
publicstaticvoidloggingcallback(操作回调通知)
{
尝试
{
if(OperationContext.Current!=null)
{
var guest=OperationContext.Current.GetCallbackChannel();
如果(!CallbackList.Contains(guest))
{
CallbackList.Add(guest);
}
}
foreach(CallbackList中的var LoggingCallBack)
{
var temp=记录回调;
尝试
{
新线程(()=>
{
尝试
{
回拨通知(temp);
}
捕获(例外情况除外)
{
//做点什么
}
}).Start();
}
捕获(例外情况除外)
{
//做点什么
}
}
}
捕获(例外情况除外)
{
//做某事
}
最后
{
//做某事
}
}
我遇到了一些麻烦:

  • 在我打电话之前,我无法判断客户是否在线 它回来了
  • 我需要能够删除后,没有活动从客户端 我想如果我达到了第一名,我就能做到这一点
  • 识别客户的最佳方式是什么,换句话说,是什么 我能识别客户的最佳唯一标识符
  • 如果与客户端的连接出现故障,我不知道如何检测 然后从客户端启动一个新的连接,就好像我试图这样做,但它拒绝这样做,并且它抛出连接出现故障的异常

  • 抱歉,如果我问了不止一个问题,请给出您对我发布的代码的看法以及对上述任何问题的任何回答。

    第4点是非常棘手的事情!最简单的方法就是在出现问题时捕获异常并打开新连接。