Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何提供WCF客户端的服务器端管理控制?_Wcf_Nettcpbinding_Operationcontext - Fatal编程技术网

如何提供WCF客户端的服务器端管理控制?

如何提供WCF客户端的服务器端管理控制?,wcf,nettcpbinding,operationcontext,Wcf,Nettcpbinding,Operationcontext,我有一个基于WCF、tcp的客户机-服务器应用程序(自托管),其中通过回调进行通信,InstanceContextMode为PerSession。我想为这个应用程序提供一个管理界面,允许管理员查看所有连接用户的详细信息,并提供一定程度的管理控制(例如强制断开会话) 由于我使用回调,每个客户端代理都通过构造函数为服务器提供其实例上下文。例如,客户机使用以下命令向服务器实例化其代理: public class ClientCallbackHandler : IMyServerCallback {

我有一个基于WCF、tcp的客户机-服务器应用程序(自托管),其中通过回调进行通信,InstanceContextMode为PerSession。我想为这个应用程序提供一个管理界面,允许管理员查看所有连接用户的详细信息,并提供一定程度的管理控制(例如强制断开会话)

由于我使用回调,每个客户端代理都通过构造函数为服务器提供其实例上下文。例如,客户机使用以下命令向服务器实例化其代理:

public class ClientCallbackHandler : IMyServerCallback
{             
   proxy = new MyServiceClient(new InstanceContext(this));
在服务器端,我使用以下方法检索此上下文:

var currenContext = OperationContext.Current;
我最初的想法是实现一个单例“SessionAdmin”类,该类维护OperationContext对象的集合(即持有对每个连接客户端的上下文的引用)。每个新的客户端会话都将注册到“SessionAdmin”类的同一个实例中,从而提供一个可以访问所有客户端会话的中心类

这在一定程度上是可行的,但在访问“OperationContext”对象集合以获取客户端详细信息或执行其他操作时,我注意到上下文抛出了“Object disposed”异常

我的问题是,首先,以上这些听起来像是对WCF会话提供服务器端管理控制的合理方式吗?如果是这样,如何在服务器端维护客户端会话或其上下文的集合,而不处理这些对象?问题的一个例子是:

foreach(var context in MyContextCollection)
{
    DisplayClientDetails(context);
    ...
}

public void DisplayClientDetails(OperationContext context)
{
    var sessionID = context.SessionId;  //No problem here
    var user = context.ServiceSecurityContext.PrimaryIdentity.Name;  //ServiceSecurityContext has been disposed