نحوه ایجاد نمونه از سرویس های WCF
چهارشنبه 18 آذر 1394در این مقاله قصد داریم توضیحاتی درباره چگونگی ایجاد نمونه از سرویسهای WCF با راه های مختلف ارائه دهیم. درواقع در سرویسهای WCF سه راه برای ایجاد نمونه وجود دارد : Per Call ، Per Session و Single .
در این مقاله قصد داریم توضیحاتی درباره چگونگی ایجاد نمونه از سرویسهای WCF با راه های مختلف ارائه دهیم. درواقع در سرویسهای WCF سه راه برای ایجاد نمونه وجود دارد : Per Call ، Per Session و Single . برای درک بهتر به تصویر زیر توجه کنید.
سرویس Per Call
زمانی که حالت نمونه سازی سرویس خود را Per Call Service قرار می دهید، برای هر درخواست نمونه ای ایجاد می شود. به آن معناست که هر درخواست برای دسترسی به سرویس بعد از ایجاد نمونه ای جدید انجام خواهد شد. زمانی که سرویس گیرنده به داده بر میگردد ، نمونه ایجاد شده از بین می رود .
در صورت تمایل میتوانید به صورت رایگان آموزش WCF به همراه پروژه عملی را در سایت تاپ لرن مشاهده کنید .
چه اتفاقی در هنگام درخواست تا بازگشتن داده ها به سرویس گیرنده می افتد؟ زمانی که یک سرویس را فراخوانی میکنید ، سرویس گیرنده به سراغ کلاس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(); }
- WCF
- 2k بازدید
- 2 تشکر