日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WCF双工通信笔记

發(fā)布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF双工通信笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1,Dupex(雙工)?MEP(消息交換模式),服務(wù)端回調(diào)(Callback)客戶端操作

2,客戶端調(diào)用服務(wù)時,附加上一個回調(diào)對象(InstanceContext)。服務(wù)端處理服務(wù)請求時,通過該回調(diào)對象調(diào)用客戶端操作。

3,WCF系統(tǒng)設(shè)計常用四層結(jié)構(gòu):Contracts(契約),Services(服務(wù)),Hosting(服務(wù)寄宿),Clients(客戶端)

4,客戶端調(diào)用服務(wù),需要服務(wù)契約;服務(wù)端回調(diào)客戶端操作,同樣需要回調(diào)契約。回調(diào)契約通過ServiceContract(服務(wù)契約)特性的CallbackContract屬性指定

5,回調(diào)契約本質(zhì)也是服務(wù)契約,但在服務(wù)契約里已指明該回調(diào)契約的服務(wù)契約屬性,所以回調(diào)契約不需要再標(biāo)記ServiceContract屬性

6,服務(wù)端在處理服務(wù)請求時,通過當(dāng)前的OperationContext.Current.GetCallback<T>方法獲取回調(diào)對象,T代表回調(diào)契約的類型

7,OperationContext代表服務(wù)操作執(zhí)行上下文,通過靜態(tài)屬性Current獲取當(dāng)前OperationContent。我們可以在服務(wù)端或客戶端設(shè)置一些上下文,比如為出棧消息添加Soap報頭,從入棧消息取出報頭等

8,為執(zhí)行回調(diào),客戶端首先要實現(xiàn)回調(diào)契約:定義繼承回調(diào)契約的類,實現(xiàn)回調(diào)契約接口方法

9,調(diào)用雙工服務(wù),先創(chuàng)建回調(diào)對象,并通過InstanceContext對回調(diào)對象包裝,然后用DuplexChannelFactory<TChannel>方法創(chuàng)建服務(wù)通道。

10,用服務(wù)通道的CreateChannel方法生成服務(wù)代理對象,進而調(diào)用服務(wù)方法。

11,服務(wù)響應(yīng)請求,回調(diào)回調(diào)對象的方法,在客戶端執(zhí)行回調(diào)方法。

?契約定義:

using System.ServiceModel; namespace Contracts {[ServiceContract(CallbackContract = typeof(ICallback))]public interface ICalculator{[OperationContract(IsOneWay =true)]void Add(double x,double y);}public interface ICallback{[OperationContract(IsOneWay = true)]void DisplayResult(double x, double y, double result);} }

服務(wù)實現(xiàn):

using Contracts; namespace Services {public class CalculatorService : ICalculator{public void Add(double x, double y){double result = x + y;ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();callback.DisplayResult(x,y, result);}} }

服務(wù)寄宿:

using System; using System.ServiceModel; using Services; namespace Hosting {class Program{static void Main(string[] args){using (ServiceHost host = new ServiceHost(typeof(CalculatorService))){host.Open();Console.Read();}}} }

寄宿配置:

<system.serviceModel><services><service name="Services.CalculatorService"><endpoint address="net.tcp://127.0.0.1:9999/CalculatorService" binding="netTcpBinding" contract="Contracts.ICalculator"/></service></services></system.serviceModel>

客戶端調(diào)用及回調(diào)實現(xiàn):

using Contracts; using System; using System.ServiceModel; namespace Clients {class Program{static void Main(string[] args){InstanceContext instanceContext = new InstanceContext(new CalculatorCallback());using (DuplexChannelFactory<ICalculator> ChannelFactory = new DuplexChannelFactory<ICalculator>(instanceContext, "CalculatorService")){ICalculator prox = ChannelFactory.CreateChannel();using (prox as IDisposable){prox.Add(1, 2);Console.Read();}}}}class CalculatorCallback : ICallback{public void DisplayResult(double x, double y, double result){Console.WriteLine($"{x} + {y} = {result}");}} }

客戶端配置:

<system.serviceModel><client><endpoint name ="CalculatorService" address="net.tcp://127.0.0.1:9999/CalculatorService" binding="netTcpBinding" contract="Contracts.ICalculator"/></client></system.serviceModel>

WCF Tcp雙工通信 Get !

轉(zhuǎn)載于:https://www.cnblogs.com/TianPing/p/10056472.html

總結(jié)

以上是生活随笔為你收集整理的WCF双工通信笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。