نحوه ایجاد نمونه از سرویس های WCF

در این مقاله قصد داریم توضیحاتی درباره چگونگی ایجاد نمونه از سرویسهای WCF با راه های مختلف ارائه دهیم. درواقع در سرویسهای WCF سه راه برای ایجاد نمونه وجود دارد : Per Call ، Per Session و Single .

نحوه ایجاد نمونه از سرویس های WCF

در این مقاله قصد داریم توضیحاتی درباره چگونگی ایجاد نمونه از سرویسهای  WCF با راه های مختلف ارائه دهیم. درواقع در سرویسهای  WCF  سه راه برای ایجاد نمونه وجود دارد : Per Call ،  Per Session و  Single  . برای درک بهتر به تصویر زیر توجه کنید.  

سرویس Per Call

زمانی که حالت نمونه سازی سرویس خود را Per Call Service  قرار می دهید، برای هر درخواست نمونه ای ایجاد می شود. به آن معناست که هر درخواست برای دسترسی به سرویس بعد از ایجاد نمونه ای جدید انجام خواهد شد. زمانی که سرویس گیرنده به داده بر میگردد ، نمونه ایجاد شده از بین می رود .

چه اتفاقی در هنگام درخواست تا بازگشتن داده ها به سرویس گیرنده می افتد؟ زمانی که یک سرویس را فراخوانی میکنید ، سرویس گیرنده به سراغ کلاسProxy  می رود که قادر به کنترل داده های سرویس است یا برای ارتباط با سرویس استفاده می شود. پس این مسئولیت کلاس Proxy  است که درخواست ها را به سرویس ارسال کند و از آن نمونه ایجاد کند. بعد از ایجاد نمونه از کلاس ، متد درخواست شده را فراخوانی میکند . متد مورد نظر ، مقدار را برمیگرداند و به  سرویس گیرنده می دهد و بعد از آن نمونه ای از سرویس WCF  نمایش داده می شود.

پیاده سازی سرویس :

    [ServiceContract()]  
    public interface IMathService  
    {  
        [OperationContract]  
        int ReturnCount();  
    }  
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]  
    public class MathService: IMathService  
    {  
        static int counter = 0;  
        public int ReturnCount()  
        {  
            counter++;  
            return counter;  
        }  
    }  
    Client  
    public static void Main(string[] args)  
    {  
        Console.WriteLine("Service Instance mode: Per Call ");  
        Console.WriteLine("Client making call to service...");  
        MyMathServiceServiceProxy.MyServiceProxy proxy = new MyMathServiceProxy.MyServiceProxy();  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.ReadLine();  
    }  

 

سرویس Per Session

زمانی که سرویس خود را در حالت Per Session تنظیم میکنید ، سرویس گیرنده و سرویس با استفاده از نمونه Session تعامل دارند . در اینجا برای هر درخواست یک نمونه جدید ایجاد نخواهد شد.  سرویس روی یک نمونه واحد از Session کار خواهد کرد.

پس چگونه سرویس  WCF  پردازش می شود ؟ اساسا زمانی که سرویس گیرنده یک داده را از سرویس درخواست میکند ، ابتدا Proxy و متد فراخوانی می شوند. زملنی که سرویس  WCF متد را فراخوانی میکند ، یک نمونه از سرویس WCF  ایجاد شده و در Session  ذخیره می شود. هنگامی که سرویس گیرنده دوباره درخواست میکند آنگاه نمونه مشابهی برای پردازش داده ها استفاده می شود.

    [ServiceContract()]  
    public interface IMathService  
    {  
        [OperationContract]  
        int ReturnCount();  
    }  
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]  
    public class MathService: IMathService  
    {  
        static int counter = 0;  
        public int ReturnCount()  
        {  
            counter++;  
            return counter;  
        }  
    }  
    Client  
    public static void Main(string[] args)  
    {  
        Console.WriteLine("Service Instance mode: Per Session ");  
        Console.WriteLine("Client making call to service...");  
        MyMathServiceServiceProxy.MyServiceProxy proxy = new MyMathServiceProxy.MyServiceProxy();  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.ReadLine();  
    }  

 

حالت  Single Instance

در این حالت تنها یک نمونه واحد ایجاد می شود . هنگامی که سرویس شما با این حالت تنظیم شده باشد و سرویس گیرنده سرویس را فراخوانی کند تنها یک نمونه واحد برای ارتباط با برنامه سرویس گیرنده ایجاد خواهد شد. نمونه هنگام میزبانی سرویس ایجاد خواهد شد و هنگام خاموش کردن سرویس از بین خواهد رفت.

پس از چند سرویس گیرنده به سرویس یکسان در زمان یکسان دسترسی داشته باشند ، فقط آن نمونه واحد داده ها را با چندین سرویس گیرنده به اشتراک خواهد گذاشت.

    [ServiceContract()]  
    public interface IMathService  
    {  
        [OperationContract]  
        int ReturnCount();  
    }  
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]  
    public class MathService: IMathService  
    {  
        static int counter = 0;  
        public int ReturnCount()  
        {  
            counter++;  
            return counter;  
        }  
    }  
    Client  
    public static void Main(string[] args)  
    {  
        Console.WriteLine("Service Instance mode: Single");  
        Console.WriteLine("Client making call to service...");  
        //Client A  
        MyMathServiceServiceProxy.MyServiceProxy proxy = new MyMathServiceProxy.MyServiceProxy();  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.WriteLine("Count: " + proxy.ReturnCount());  
        Console.ReadLine();  
        //Client B  
        MyMathServiceServiceProxy.MyServiceProxy proxy2 = new MyMathServiceProxy.MyServiceProxy();  
        Console.WriteLine("Count: " + proxy2.ReturnCount());  
        Console.WriteLine("Count: " + proxy2.ReturnCount());  
        Console.WriteLine("Count: " + proxy2.ReturnCount());  
        Console.WriteLine("Count: " + proxy2.ReturnCount());  
        Console.ReadLine();  
    }  

 

دانلود نسخه ی PDF این مطلب