مدیریت Instance در WCF
نویسنده: مسعود پاکدل
تاریخ: ۱۳۹۲/۰۲/۲۷ ۱۷:۴۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
[ServiceContract(SessionMode=SessionMode.Allowed)]
public interface IMyService
{
[OperationContract]
int GetData();
}[ServiceBehavior( InstanceContextMode = InstanceContextMode.PerCall )]
public class PerCallService : IMyService
{
int count;
public int GetData()
{
return ++count;
}
} static void Main( string[] args )
{
Console.WriteLine( "PerCall Service" );
MyPerCallService.MyServiceClient client = new MyPerCallService.MyServiceClient();
int count = 0;
for ( int i = 0 ; i < 5 ; i++ )
{
count = client.GetData();
}
Console.WriteLine( count );
Console.ReadLine();
}بعد از 5 بار فراخوانی متد GetData باز خروجی دارای مقدار 1 است. یعنی به ازای هر بار فراخوانی متد GetData یک نمونه از سرویس مورد نظر ساخته میشود.این عمل توسط خصوصیت InstanceContextMode که از نوع PerCall است به سرویس اعمال میشود.
حالا یک سرویس دیگر به صورت زیر ایجاد کنید.
[ServiceBehavior( InstanceContextMode = InstanceContextMode.Single )]
public class SingleService : IMyService
{
int count;
public int GetData()
{
return ++count;
}
}static void Main( string[] args )
{
Console.WriteLine( "Single Service" );
MySingleService.MyServiceClient client = new MySingleService.MyServiceClient();
int count = 0;
for ( int i = 0 ; i < 5 ; i++ )
{
count = client.GetData();
}
Console.WriteLine("Result is : {0}", count );
Console.ReadLine();
}به ازای 5 بار فراخوانی سرویس متغیر Count سمت سرور مقدار قبلی خود را حفظ کرده است.
[ServiceContract(SessionMode=SessionMode.Reqquired)]
[ServiceBehavior( InstanceContextMode = InstanceContextMode.PerSession)]