C# 在WCF wsDualHttpBinding上下文中跟踪客户端
我在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
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点是非常棘手的事情!最简单的方法就是在出现问题时捕获异常并打开新连接。