我应该写一个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数据集应在此方法内或类内声明?
答案 0 :(得分:0)
如果我理解正确
如果类Singleton
是服务的实现,则此类应标记为属性[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
。
在这种情况下,每个客户端都会创建一个服务实例。 否则,每个客户端都会创建自己的服务实例。