.web项目silverlight上的静态类

时间:2013-12-09 19:44:56

标签: wcf silverlight class sockets static

我一直有问题,但到目前为止还没有解决方案,我希望你能帮助我。

我有一个Silverlight应用程序,我使用WCF进行查询以从数据库中检索信息,也用于客户端(Duplex)和Socket之间的通信(在我的应用程序和其他人之间接收和发送信息)。

要控制Duplex,当客户端访问我的应用程序的特定模块时,我将该客户链接到我在Projeto.Web(应用程序启动)上的静态类,如下面的代码所示:

    //static Class
    public static class ncClientes
    {
            private static List<IncServicoDuplex> clientesSupRecAlarme = new List<IncServicoDuplex>();
            public static List<IncServicoDuplex> ClientesSupRecAlarme
            {
                    get { return ncClientes.clientesSupRecAlarme; }
                    set { ncClientes.clientesSupRecAlarme = value; }
            }
    }

    //Método chamado pelo WCF quando o cliente acessa o módulo
    public void VinculaCliente(string strProjeto)
    {
            //GetCallbackChannel - obter o canal de comunicação entre o serviço e o cliente - retornará a instância do canal entre o serviço e o cliente.
            IncServicoDuplex cliente = OperationContext.Current.GetCallbackChannel<IncServicoDuplex>();

            //A palavra-chave lock marca um bloqueio de instruções como uma seção crítica, obter o bloqueio de exclusão de mútua para um determinado objeto, 
            //executar uma instrução e, em seguida, liberar o bloqueio.
            switch (strProjeto)
            {
                    case "ncPrincipal|Alarme":
                    case "ncAlarme":
                    case "ncConfiguracao|Supervisao":
                            lock (ncClientes.ClientesSupRecAlarme)
                            {
                                    ncClientes.ClientesSupRecAlarme.Add(cliente);
                            }
                    break;
            }
    }

当我对数据库进行更改时,所有位于更改WCF服务的接收模块的在线客户都使用以下代码:

    //Método no meu WCF que transmite a informação de alteração, inclusão ou exclusão de um cliente para os outros
    public void SupervisaoAlarmeOnline(ncAlarme objAlarme)
    {
            var varClientesAlarme = new List<IncServicoDuplex>(ncClientes.ClientesSupRecAlarme);

            foreach (var item in varClientesAlarme)
            {
                    try
                    {
                        item.SupervisaoAlarmeOnlineRetorno(objAlarme);
                    }
                    catch
                    {
                        ncClientes.ClientesSupRecAlarme.Remove(item);
                    }
            }
    }

我的问题发生在我通过Socket(位于projeto.Web中的类)获取一些信息时,它创建了我的ServicoWCF实例并调用该方法将接收到的信息发送给客户端。显然,我的静态变量在应用程序的这一侧被调用时被重置。

我称之为服务的“哪一方”有什么不同吗?当我在WCF客户端调用它时,我的静态变量得到正确的计数,但是当我在Socket类上调用它时,count被设置为0。

我希望你能帮助我,我尽量保持清醒,如果有任何疑问请告诉我。

提前致谢!

0 个答案:

没有答案