在WCF开发插件中,对于契约的各种操作是一个比较重要的基础应用技术,我们在学习的过程中需要对其进行充分的掌握。在这里我们就先来一起了解一下关于WCF契约回调的相关方法。方便大家理解。#t#
站在用户的角度思考问题,与客户深入沟通,找到沁源网站设计与沁源网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名申请、虚拟空间、企业邮箱。业务覆盖沁源地区。
在WCF的默认的绑定中WSDualHttpBinding是一个安全且可互操作的绑定。适用于双工服务协定或通过 SOAP 媒介进行的通信。本示例就是基于此绑定来实现的。为在编程中多应用些WCF编程的技术,服务端采用代码来创建服务端承载。
WCF契约回调第一步 创建标准契约和回调契约
回调契约,用于在客户端显示结果信息
- [ServiceContract(Namespace="http://www,cbcye.com/wcf/Callback/)]
- public interface ICalculatorCallback
- {
- [OperationContract]
- void ShowResult(double x, double y, double result);
- }
标准契约,声明了回调契约的类型
- [ServiceContract(CallbackContract = typeof(ICalculatorCallback))]
- public interface IDuplexCalculator
- {
- [OperationContract]
- void Add(double x, double y);
- }
WCF契约回调第二步 在服务端实现标准契约
- [ServiceBehavior(ConcurrencyModeConcurrencyMode=ConcurrencyMode.Multiple)]
- public class DuplexCalculatorService:IDuplexCalculator
- {
- IDuplexCalculator Members#region IDuplexCalculator Members
- public void Add(double x, double y)
- {
- double result = x + y;
- //调用 GetCallbackChannel< (Of < (T>)>) 属性以获取通道,
使用该通道可以调用调用服务的客户端实例的操作。- ICalculatorCallback callBack = OperationContext.Current.
GetCallbackChannel< ICalculatorCallback>();- callBack.ShowResult(x, y, result);
- }
- #endregion
- }
WCF契约回调第三步 创建服务端承载
- 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适用于双工服务协定或通过 SOAP 媒介进行的通信。
- WSDualHttpBinding wsDualHttpBinding = new WSDualHttpBinding();
- //添加服务绑定和服务契约
- calculatorServiceHost.AddServiceEndpoint(typeof(IDuplexCalculator),
wsDualHttpBinding, string.Empty);- //绑定服务行为
- 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契约回调第四步 在客户端实现回调契约
- 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契约回调第五步 实现客户端代理
- 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契约回调第六步 客户端调用
程序代码
- 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绑定执行回调时,需要开通两个HTTP通道,一个用于服务,一个用于回调。因此需要配置两个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>
- < !-- 指定一个或多个系统预定义的binding,比如< basicHttpBinding>,
当然也可以指定自定义的customBinding,- 然后在某个指定的binding下建立一个或多个配置,以便被Endpoint来使用这些配置 -->
- < wsDualHttpBinding>
- < binding
- name="wsDualHttpBinding_DuplexCalculator"
- clientBaseAddress="http://localhost:7799/cbcye/Calculator%22
- />
- < /wsDualHttpBinding>
- < /bindings>
- < /system.serviceModel>
- < /configuration>
以上就是WCF契约回调的全部方法介绍。
本文题目:WCF契约回调六步骤简单操作
文章源于:http://www.csdahua.cn/qtweb/news12/65862.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网