新聞中心
在WCF開發(fā)插件中,對于契約的各種操作是一個比較重要的基礎(chǔ)應(yīng)用技術(shù),我們在學(xué)習(xí)的過程中需要對其進行充分的掌握。在這里我們就先來一起了解一下關(guān)于WCF契約回調(diào)的相關(guān)方法。方便大家理解。#t#

站在用戶的角度思考問題,與客戶深入溝通,找到沁源網(wǎng)站設(shè)計與沁源網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋沁源地區(qū)。
在WCF的默認的綁定中WSDualHttpBinding是一個安全且可互操作的綁定。適用于雙工服務(wù)協(xié)定或通過 SOAP 媒介進行的通信。本示例就是基于此綁定來實現(xiàn)的。為在編程中多應(yīng)用些WCF編程的技術(shù),服務(wù)端采用代碼來創(chuàng)建服務(wù)端承載。
WCF契約回調(diào)第一步 創(chuàng)建標(biāo)準(zhǔn)契約和回調(diào)契約
回調(diào)契約,用于在客戶端顯示結(jié)果信息
- [ServiceContract(Namespace="http://www,cbcye.com/wcf/Callback/)]
- public interface ICalculatorCallback
- {
- [OperationContract]
- void ShowResult(double x, double y, double result);
- }
標(biāo)準(zhǔn)契約,聲明了回調(diào)契約的類型
- [ServiceContract(CallbackContract = typeof(ICalculatorCallback))]
- public interface IDuplexCalculator
- {
- [OperationContract]
- void Add(double x, double y);
- }
WCF契約回調(diào)第二步 在服務(wù)端實現(xiàn)標(biāo)準(zhǔn)契約
- [ServiceBehavior(ConcurrencyModeConcurrencyMode=ConcurrencyMode.Multiple)]
- public class DuplexCalculatorService:IDuplexCalculator
- {
- IDuplexCalculator Members#region IDuplexCalculator Members
- public void Add(double x, double y)
- {
- double result = x + y;
- //調(diào)用 GetCallbackChannel< (Of < (T>)>) 屬性以獲取通道,
使用該通道可以調(diào)用調(diào)用服務(wù)的客戶端實例的操作。- ICalculatorCallback callBack = OperationContext.Current.
GetCallbackChannel< ICalculatorCallback>();- callBack.ShowResult(x, y, result);
- }
- #endregion
- }
WCF契約回調(diào)第三步 創(chuàng)建服務(wù)端承載
- class Program
- {
- static void Main(string[] args)
- {
- HostCalculatorService();
- }
- static void HostCalculatorService()
- {
- Uri dualUri = new Uri("http://localhost:7788/cbcye/Calculator%22);
- //向HOST中添加BaseAddress
- using (ServiceHost calculatorServiceHost = new ServiceHost
(typeof(DuplexCalculatorService), dualUri))- {
- //WSDualHttpBinding適用于雙工服務(wù)協(xié)定或通過 SOAP 媒介進行的通信。
- WSDualHttpBinding wsDualHttpBinding = new WSDualHttpBinding();
- //添加服務(wù)綁定和服務(wù)契約
- calculatorServiceHost.AddServiceEndpoint(typeof(IDuplexCalculator),
wsDualHttpBinding, string.Empty);- //綁定服務(wù)行為
- ServiceMetadataBehavior behavior = calculatorServiceHost.
Description.Behaviors.Find< ServiceMetadataBehavior>();- {
- if (behavior == null)
- {
- behavior = new ServiceMetadataBehavior();
- behavior.HttpGetEnabled = true;
- calculatorServiceHost.Description.Behaviors.Add(behavior);
- }
- else
- {
- behavior.HttpGetEnabled = true;
- }
- }
- //啟動事件
- calculatorServiceHost.Opened += delegate
- {
- Console.WriteLine("Calculator Service has begun to listen
on "+ dualUri.ToString());- };
- calculatorServiceHost.Open();
- Console.Read();
- }
- }
- }
WCF契約回調(diào)第四步 在客戶端實現(xiàn)回調(diào)契約
- class CalculatorCallbackHandler:ICalculatorCallback
- {
- #region ICalculatorCallback Members
- public void ShowResult(double x, double y, double result)
- {
- Console.WriteLine("x + y = {2} (x = {0} , y = {1})", x, y, result);
- }
- #endregion
- }
WCF契約回調(diào)第五步 實現(xiàn)客戶端代理
- class ClientProxy:ClientBase< IDuplexCalculator>,IDuplexCalculator
- {
- public ClientProxy(InstanceContext callbackInstance)
- : base(callbackInstance)
- { }
- #region IDuplexCalculator Members
- public void Add(double x, double y)
- {
- this.Channel.Add(x, y);
- }
- #endregion
- }
WCF契約回調(diào)第六步 客戶端調(diào)用
程序代碼
- class Program
- {
- static void Main(string[] args)
- {
- try
- {
- InvocateDuplexCalculator();
- }
- catch (Exception exp)
- {
- Console.WriteLine("[Error] " + exp.Message);
- }
- Console.Read();
- }
- static void InvocateDuplexCalculator()
- {
- CalculatorCallbackHandler callbackHandler =
new CalculatorCallbackHandler();- using (ClientProxy calculator = new ClientProxy
(new InstanceContext(callbackHandler)))- {
- Console.WriteLine("Begin to invocate duplex calculator ");
- calculator.Add(85, 86);
- calculator.Close();
- }
- }
- }
配置文件
由于使用WSDualHttpBinding綁定執(zhí)行回調(diào)時,需要開通兩個HTTP通道,一個用于服務(wù),一個用于回調(diào)。因此需要配置兩個HTTP地址。
- < ?xml version="1.0" encoding="utf-8" ?>
- < configuration>
- < system.serviceModel>
- < client>
- < !--bindingConfiguration - 指定一個binding的配置名稱,跟< bindings>
下面同類< binding>的name匹配-->- < endpoint name="SubscriptionService"
- address="http://localhost:7788/cbcye/Calculator%22
- binding="wsDualHttpBinding"
- bindingConfiguration="wsDualHttpBinding_DuplexCalculator"
- contract="Cbcye.Contract.IDuplexCalculator"
- />
- < /client>
- < bindings>
- < !-- 指定一個或多個系統(tǒng)預(yù)定義的binding,比如< basicHttpBinding>,
當(dāng)然也可以指定自定義的customBinding,- 然后在某個指定的binding下建立一個或多個配置,以便被Endpoint來使用這些配置 -->
- < wsDualHttpBinding>
- < binding
- name="wsDualHttpBinding_DuplexCalculator"
- clientBaseAddress="http://localhost:7799/cbcye/Calculator%22
- />
- < /wsDualHttpBinding>
- < /bindings>
- < /system.serviceModel>
- < /configuration>
以上就是WCF契約回調(diào)的全部方法介紹。
網(wǎng)頁題目:WCF契約回調(diào)六步驟簡單操作
文章網(wǎng)址:http://fisionsoft.com.cn/article/dhpjhee.html


咨詢
建站咨詢
