在这种情况下,单身人士模式对我有用吗?

时间:2015-12-07 05:35:35

标签: c# wcf

我应该写一个WCF服务,它从AppServer(连接数据库)中检索客户信息并将其暴露给ATM客户端。我们将在一台服务器上安装该服务并托管在IIS中。网络上将有多个客户端,它将访问IIS中托管的服务。

我怀疑单例实例如何使用一个实例处理多个请求?我仍然无法理解单身人士的使用。它的定义说只为服务创建一个实例。但它如何处理多个请求?或者我应该为每个请求创建对象吗?

以下是我的代码。 (代码中可能有错误但我只想了解单例的使用)

Appserver中的类

class Customer
{
    public Dataset Getcustdetails(int customerid)

    {   


    }
}
WebService中的

class Singleton
{
    Dataset custds;

    private static Singleton instance = null;
        private static readonly object padlock = new object();

      Singleton()
            {
       }

        public static Singleton Instance
    {
           get
          {
           lock (padlock)
           {
                if (instance == null)
                 {
                 instance = new Singleton();
                  }
                 return instance;
           }
         }
           }


    public bool GetCustomerdetails(int customerid, out DataSet customerDS)

       {    
         Customer objcust = new Customer();             //will the objcust created everytime for every request? or the customer class should also be singleton?
         custds = objcust.Getcustdetails(customerid);               //custds dataset should be declared inside this method or inside the class?
         customerDS = custds ;
         return true;

       }

}

客户端中的类

namespace Client1
{
    class Program
    {
        static void Main(string[] args)
        {
            Dataset ds ;
        Singleton SingletonObject = Singleton.Instance();
           bool returnval= SingletonObject.GetCustomerdetails(1234,ds);

        }
    }

}

//**Acessing at the same time from a different client for same customer**/

namespace Client2
{
    class Program2
    {
        static void Main(string[] args)
        {
            Dataset ds ;
        Singleton SingletonObject = Singleton.Instance();
           bool returnval= SingletonObject.GetCustomerdetails(1234,ds);

        }
    }
}

namespace Client3
{
    class Program3
    {
        static void Main(string[] args)
        {
            Dataset ds ;
        Singleton SingletonObject = Singleton.Instance();
           bool returnval= SingletonObject.GetCustomerdetails(5678,ds);

        }
    }
}

我对上述代码的怀疑

每次请求都会为每次请求创建objcust吗?或者客户类也应该是单身人士? custds数据集应在此方法内或类内声明?

1 个答案:

答案 0 :(得分:0)

如果我理解正确

如果类Singleton是服务的实现,则此类应标记为属性[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]

Singleton service

在这种情况下,每个客户端都会创建一个服务实例。 否则,每个客户端都会创建自己的服务实例。