WCF服務(wù)實例單一性實現(xiàn)案例解讀
在應(yīng)用WCF這樣一款功能強大的開發(fā)工具的前提下,我們需要熟練的掌握其中的各種應(yīng)用技術(shù)以及功能的了解,這樣才能有助于我們的實際應(yīng)用。在這里我們將會為大家介紹一下WCF服務(wù)實例單一性的實現(xiàn)方法。
了讓讀者對單例實例上下文模式有一個直觀的認識,我們通過一個簡單的案例演示單例模式下WCF服務(wù)實例單一性。這里使用前面章節(jié)使用過的累加器的例子,下面是服務(wù)契約和服務(wù)實現(xiàn)的定義:在初始化時,運算的結(jié)果為零,通過Add方法僅僅對結(jié)果累加,計算的結(jié)果通過GetResult操作返回。在CalculatorService上面,通過System.ServiceModel.ServiceBehaviorAttribute將服務(wù)設(shè)定為單例模式。
- using System.ServiceModel;
- namespace Artech.WcfServices.Contracts
- {
- [ServiceContract(Namespace="http://www.artech.com/")]
- public interface ICalculator
- {
- [OperationContract]
- void Add(double x);
- [OperationContract]
- double GetResult();
- }
- }
- using System.ServiceModel;
- using Artech.WcfServices.Contracts;
- namespace Artech.WcfServices.Services
- {
- [ServiceBehavior(InstanceContextModeInstanceContextMode =
InstanceContextMode.Single)]- public class CalculatorService : ICalculator
- {
- private double _result;
- public void Add(double x)
- { 11: this._result += x;
- }
- public double GetResult()
- {
- return this._result;
- }
- }
- }
在客戶端,通過ChannelFactory<ICalculator>創(chuàng)建兩個服務(wù)代理,模擬兩個不同的客戶端。從最終輸出來看,得到的結(jié)果并不能反映出具體某個客戶端正常的累加運算(對于通過calculator2模擬的客戶端,僅僅調(diào)用了一次Add(3),得到的結(jié)果卻是6)這是所有客戶端一起累加的結(jié)果,這就是WCF服務(wù)實例單一性造成。
- using (ChannelFactory<ICalculator> channelFactory =
new ChannelFactory<ICalculator>("calculatorservice"))- {
- ICalculator calculator1 = channelFactory.CreateChannel();
- ICalculator calculator2 = channelFactory.CreateChannel();
- Console.WriteLine("1st serivce proxy:");
- Console.WriteLine("Add(3);");
- calculator1.Add(3);
- Console.WriteLine("The result is {0}.\n", calculator1.GetResult());
- Console.WriteLine("2nd serivce proxy:");
- Console.WriteLine("Add(3);");
- calculator2.Add(3);
- Console.WriteLine("The result is {0}.", calculator2.GetResult());
- }
輸出結(jié)果:
- 1st serivce proxy:Add(3);
- The result is 3.
- 2nd serivce proxy:Add(3);
- The result is 6.
以上就是我們對WCF服務(wù)實例單一性的相關(guān)介紹。
【編輯推薦】