WCF雙向通信相關(guān)概念正確理解
WCF的出現(xiàn),給開(kāi)發(fā)領(lǐng)域帶來(lái)了不小的變化。那么如何才能正確的應(yīng)用這一新的技術(shù)呢?在這里我們可以先從WCF雙向通信的相關(guān)概念開(kāi)始了解,以此來(lái)進(jìn)一步加深我們對(duì)這一工具的了解程度。#t#
WCF整合了Remoting和webService等等。而且開(kāi)發(fā)簡(jiǎn)單(相對(duì)的),它既彌補(bǔ)Remoting的只能在.net上運(yùn)行,又彌補(bǔ)了asmx只能單向傳送消息的缺點(diǎn)。也就是說(shuō),WCF是實(shí)現(xiàn)跨平臺(tái),在跨平臺(tái)的同時(shí),也可以雙向通信。在WCF的編程思想中,無(wú)疑將SOA的思想體現(xiàn)的***。
首先要做的是就是定義服務(wù)契約。定義契約一般使用接口,使得實(shí)現(xiàn)和消費(fèi)這個(gè)服務(wù)的雙方都要按照這個(gè)契約來(lái)實(shí)現(xiàn)相應(yīng)的接口。在雙向通信中至少要定義兩個(gè)服務(wù),一個(gè)服務(wù)是供消費(fèi)程序消費(fèi)的,另一個(gè)則是在callBack的時(shí)候調(diào)用的服務(wù),這個(gè)服務(wù)應(yīng)該由消費(fèi)程序?qū)崿F(xiàn)。
其次,就是在服務(wù)端實(shí)現(xiàn)這些契約(說(shuō)白了就是實(shí)現(xiàn)上面定義的接口)。在開(kāi)發(fā)中,我們經(jīng)常會(huì)把這個(gè)實(shí)現(xiàn)獨(dú)立出來(lái),方便在不同的宿主中發(fā)布這些服務(wù)。
***,實(shí)現(xiàn)客戶端。在WCF雙向通信中,客戶端也是服務(wù)端,因?yàn)樗矊?shí)現(xiàn)了服務(wù)契約。
來(lái)段代碼:
- namespace Lin.Contract
 - {
 - [ServiceContract(CallbackContract=typeof(ICallBack))]
 - public interface IHello
 - {
 - [OperationContract]
 - void SayHelloTo(string userName);
 - }
 - }
 - namespace Lin.Contract
 - {
 - [ServiceContract]
 - public interface ICallBack
 - {
 - [OperationContract]
 - void ReceiveTime(DateTime time);
 - }
 - }
 - Service:
 - namespace Lin.Service
 - {
 - [ServiceBehavior(ConcurrencyModeConcurrencyMode =
 
ConcurrencyMode.Reentrant)]- public class ServiceHello : IHello
 - {
 - IHello 成員#region IHello 成員
 - public void SayHelloTo(string userName)
 - {
 - Console.WriteLine("Hello {0}", userName);
 - OperationContext.Current.GetCallbackChannel<ICallBack>()
 
.ReceiveTime(DateTime.Now);- }
 - #endregion
 - }
 - }Host:
 - class Program
 - {
 - static void Main(string[] args)
 - {
 - using (ServiceHost host = new ServiceHost(typeof(ServiceHello)))
 - {
 - host.Open();
 - Console.Read();
 - }
 - }
 - }Client:
 - namespace Lin.Client
 - {
 - public class ClientCallBack:ICallBack
 - {
 - ICallBack 成員#region ICallBack 成員
 - public void ReceiveTime(DateTime time)
 - {
 - Console.WriteLine("服務(wù)器收到消息的時(shí)間是:{0}",
 
time.ToLongTimeString());- }
 - #endregion
 - }
 - }
 
WCF雙向通信調(diào)用服務(wù):
- namespace Lin.Client
 - {
 - public class ClientHello : DuplexClientBase<IHello>, IHello
 - {
 - public ClientHello(InstanceContext instance) : base(instance) { }
 
IHello 成員#region IHello 成員
- public void SayHelloTo(string userName)
 - {
 - base.Channel.SayHelloTo(userName);
 - }
 - #endregion
 - }
 - }
 - class Program
 - {
 - static void Main(string[] args)
 - {
 - Hello();
 - Console.Read();
 - }
 - static void Hello()
 - {
 - ClientCallBack callBack = new ClientCallBack();
 - ClientHello hello = new ClientHello(new InstanceContext(callBack));
 - string commandString = string.Empty;
 - while (commandString != "exit")
 - {
 - commandString = Console.ReadLine();
 - hello.SayHelloTo(commandString);
 - }
 - }
 - }
 
以上就是我們對(duì)WCF雙向通信的相關(guān)介紹。















 
 
 


 
 
 
 