繁体   English   中英

使用Persession WCF服务对象的多个应用程序请求的单例执行

[英]Singleton execution for multiple application requests with persession WCF service object

我有一个类(并发)对象,在其中初始化所有与数据库相关的设置。 所有这些代码都在WCF服务中。 为了进行实例管理,我基于会话建立了服务实例。 现在,我想通过所有数据库层类共享并发类对象。 我一直在想可以使用此单例。尽管我已经为wcf服务使用了Persession实例创建,但我很困惑,单例模式将如何同时响应多个请求。 每个用户都将获得相同的类对象,还是将与所有用户共享同一类对象?

场景是:我有用户对象。 用户属于组织 WCF服务具有方法“ UserRegistration ”。 使用wcf service,我有用于数据库操作的单独的类库。 当任何客户端调用用户注册方法时,必须在Concurrency对象中针对用户的组织设置数据库设置 为此,我想为每个用户管理一个并发对象。 这是正确的方法吗?

希望正确理解您的问题。 我自己遇到了这个问题,只有一个DAL入口点。 它必须在多个平台上工作:WCF,WF,ASMX,ASP.NET等。

我想出了这种单例实现,将类实例保存在用户会话中(适用于该平台时):

public static Class1 Current
{
    get
    {
        if (HttpContext.Current != null) /* ASP.NET / ASMX / ASHX */
        {
            if (HttpContext.Current.Session["Class1"] == null)
                HttpContext.Current.Session["Class1"] = new Class1();

            return (Class1)HttpContext.Current.Session["Class1"];
        }
        else if (OperationContext.Current != null) /* WCF */
        {
            if (WcfInstanceContext.Current["Class1"] == null)
                WcfInstanceContext.Current["Class1"] = new Class1();

            return (Class1)WcfInstanceContext.Current["Class1"];
        }
        else /* WPF / WF / Single instance applications */
        {
            if (Class1.current == null)
                Class1.current = new Class1();

            return Class1.current;
        }
    }
}

如果您的图层中有多个对象,则可以在基类或方法中对其进行重构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM