『飞秋』WCF热门问题编程示例

WCF热门问题编程示例(1):WCF服务如何获得客户端地址信息 Posted on 2009-06-25 00:36 Frank Xu Lei 阅读(1871) 评论(19)  编辑 收藏 网摘 所属分类: WCF热门问题编程示例, SOA and EAI <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="htt 阅读详情


WCF热门问题编程示例(4):WCF客户端如何异步调用WCF服务?
Posted on 2010-08-01 14:28 Frank Xu Lei 阅读(296) 评论(3) 编辑 收藏 所属分类: SOA and EAI, WCF热门问题编程示例 
WCF热门问题编程示例(4):WCF客户端如何异步调用WCF服务?

How to call WCF Service asynchronously?

【1】问题描述:

WCF客户端如何异步调用WCF服务?

How to call WCF Service asynchronously?

 

关于WCF如何实现异步调用的问题,论坛上出现了很多帖子,也有很多讨论的文章,包括MSDN也给出了详细的学习资料和示例代码。但是很多资料过于笼统,MSDN的例子有点复杂。而我们实际项目中,要实现的需求,往往十分简单,就是要在客户端实现对于WCF服务操作的异步调用,也就是call WCF Service asynchronously。

【2】资料收集:

     这里收集一些关于WCF异步调用比较有用的参考资料和问题连接。其实关于WCF客户端异步调用WCF服务的帖子很多,很多讨论反而走了弯路,我们想要的就是简单的异步调用WCF服务操作的例子。这里给出一些比较有价值的参考资料:

如何:以异步方式调用 WCF 服务操作
How to: Call WCF Service Operations Asynchronously
ASP.NET异步调用WCF
【3】异步调用:

     这里需要了解的一个重要概念就是异步调用机制,在.NET里的异步调用机制是十分重要的一个知识点。另外就是回调的概念,这里也会使用到。.Net中的异步调用实际使用的是异步委托。异步委托将要执行的方法提交到.Net的线程池,由线程池中的线程来执行异步调用。

【4】解决办法:

知道了.NET异步调用的机制以后,我们就可以来尝试解决这个问题。这里本质是一样的。但编码的过程有点差别。

当然,最容易理解的就是我们自己写代码来实现异步调用。
其次,Visual Studio 2008已经提供了这个支持。这个更加方便。我给出截图:
 

  我们这里给出的示例过程呢,是基于手写客户端异步调用代码的。仅供参考,当然你也可以使用Visual Studio来帮助完成这个过程。

【5】服务端代码:

     服务端代码的实现十分简单,这里我们依然使用早期WCF的代码,定义一个IWCFService契约,包含一个操作SayHello,这个操作实现的功能,就是接受一name参数,然后打印返回字符串给客户端,为了演示,这里会打印出时间信息。具体代码如下:

//1.服务契约
[ServiceContract(Namespace = "http://www.cnblogs.com/frank_xl/")]
public interface IWCFService
{
    //操作契约
    [OperationContract]
    string SayHello(string name);

}
//2.服务类,继承接口。实现契约
public class WCFService : IWCFService
{
    //实现接口定义的方法
    public string SayHello(string name)
    {
        Console.WriteLine("Call Operation at {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff"));
        return string.Format("Hello {0}",name);
    }
}

【6】客户端代码:

    客户端的实现大部分代码与之前的没有区别,为了方便,我们可以在Visual Studio生成的代码基础上修改。当然也完全可以自己重写。    这里比较重要的一点,就是要实现异步调用需要的契约以及异步调用的方法。

    【6.1】首先这里要实现支持异步调用的契约:

public interface IWCFService {
    [System.ServiceModel.OperationContractAttribute(Action="http://www.cnblogs.com/frank_xl/IWCFService/SayHello", ReplyAction="http://www.cnblogs.com/frank_xl/IWCFService/SayHelloResponse")]
    string SayHello(string name);

    [OperationContract(AsyncPattern = true)]
    IAsyncResult BeginSayHello(string name, AsyncCallback callback, object asyncState);

    string EndSayHello(IAsyncResult result);
}

    【6.2】支持异步调用的客户端代理类:

     我们要在自己的WCFClient代理类里继承这个契约,并提供异步操作调用的实现,具体代码如下:

public string SayHello(string name) {
          return base.Channel.SayHello(name);
      }

      public IAsyncResult BeginSayHello(string name, AsyncCallback callback, object asyncState)
      {
          return Channel.BeginSayHello(name, callback, asyncState);
      }

      public string EndSayHello(IAsyncResult result)
      {
          return Channel.EndSayHello(result);
      }

    【6.3】测试客户端代码:

       客户端代码还有一点比较重要的地方,就是实现异步回调方法,这里我们在调用BeginSayHello方法的时候,不需要等待结果的返回,我们自己希望,WCF在调用完SayHello操作以后,执行一些必要的工作,比如显示返回结果,或者对返回的数据做更深入的处理,这里都需要使用到回调函数。我们也可以在回调方法里,来关闭WCF客户端,以释放资源。

       例子代码如下:

/// <summary>
   /// This class is defined for WCF Async Call Test
   /// </summary>
   public class WCFClientTest
   {
       static public WCFServiceClient wcfServiceProxy = null;
       static void Main(string[] args)
       {
           Console.ForegroundColor = ConsoleColor.Yellow;

           WCFClientTest client = new WCFClientTest();
           wcfServiceProxy = new WCFServiceClient("WSHttpBinding_IWCFService");
           string name = "Frank Xu Lei";
           Console.WriteLine("Client Async Call begin at {0}",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff"));
           //开始异步调用Begin Call
           wcfServiceProxy.BeginSayHello(name, client.OnCompletion, null);

           Console.WriteLine("press ENTER to exit…");
           Console.Read();

       }
       ////回调方法,Callback method
       void OnCompletion(IAsyncResult result)
       {
           string value = wcfServiceProxy.EndSayHello(result);
           Console.WriteLine("Returned value is {0} at {1}",value, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff"));
           result.AsyncWaitHandle.Close();
           wcfServiceProxy.Close();
           Console.WriteLine("Asynchronous Calls is finished");
       }
   }

 

【7】运行结果:

     这里启动宿主Host程序,然后运行WCF客户端即可,我们可以看到宿主端和客户端,异步调用操作的时间差别,打印窗口的截图如下:

 

飞秋官网:http://www.freeeim.com/

WCF Service 的创建,测试,发布与使用示例 WCF Service 的创建,测试,发布与使用示例 一, WCF Service 的创建: WCF Service Application 注: 为了在 IIS 或 WAS 中托管,则必须使用 WCF Service Application 类型,参看右侧的说明。 如准备使用 Windows Service 托管,则可使用 WCF Service Library 类型 1,创建 WCF Service Application 2,对应准备相关代码 F2 to.. 阅读详情

相关推荐

使用C#实现WCF基础示例教程

WCF(Windows Communication Foundation)是微软提供的一种用于构建面向服务的应用程序的框架。它提供了一个统一的开发模型,使得开发者能够构建、部署和使用分布式系统中的各种服务。WCF为开发者提供了一系列构建和运行服务的工具和库,同时也为服务消费提供了丰富的API。在WCF框架中,服务可以被定义为一个契约(Contract),它描述了服务能做什么,而具体的实现(Service Implementation)则关注于如何做。

weixin_42360733的博客 1454

WCF热门问题编程示例(4):WCF客户端如何异步调用WCF服务?

Posted on 2010-08-01 14:28 Frank Xu Lei 阅读(337) 评论(3)编辑收藏 所属分类: SOA and EAI, WCF热门问题编程示例<br />WCF热门问题编程示例(4):WCF客户端如何异步调用WCF服务?<br />How to call WCF Service asynchronously?<br />【1】问题描述:<br />WCF客户端如何异步调用WCF服务?<br />How to call WCF Service asynchrono

微软特邀讲师 老徐FrankXuLei 的专栏 1172

WCF服务创建,并调用(调用过程,不需添加服务引用)

WCF服务创建,并调用(调用过程,不需添加服务引用)。 打破传统的添加服务引用的方式,直接通过地址调用。请求和返回结果以JSON的形式来添加

WCF同步和异步调用实例

--WCF同步和异步调用实例 /******************************************************************************** *主题:WCF同步和异步调用实例 *说明:本文是个人学习的一些笔记和个人愚见 * 有很多地方你可能觉得有异议,欢迎一起讨论

8682

WCF服务与客户端的调用

两个解决方案实现WCF远程调用

SGM5860x高精度ADC驱动开发与SPI接口实战指南

本文详细介绍了SGM5860x高精度ADC芯片的驱动开发与SPI接口配置实战。内容涵盖芯片特性、SPI通信设置、寄存器映射、驱动初始化、数据采集处理、校准优化及调试技巧,帮助开发者快速掌握国产24位ADC的应用,提升工业测量项目的精度与稳定性。

vvv99的博客 727

学习 WCF (6)--学习调用WCF服务的各种方法

根据不同的情况,我们可以用不同的方法调用WCF服务,本文简单总结了一下调用WCF的一些方法(代理类,Ajax...),分享给大家。开发工具调用WCF 这中方法很方便也很简单,很多工作VS就帮我们完成了。相信大家也不会对这种方法陌生。这里简单提一下。打开VS,在项目中添加服务引用:在config中自动声明了有关服务的节点信息,这样VS就创建了调用服务的代理: ServiceReference1....

weixin_34163741的博客 217

长短期记忆网络(LSTM)预测模型及其Python和MATLAB实现

LSTM 通过独特的门控机制解决了传统 RNN 的梯度消失和梯度爆炸问题,使其在处理长序列时具有显著优势。随着技术的不断发展,LSTM 及其变种(如 Bi-directional LSTM、Stacked LSTM 等)有望在更复杂的任务中发挥重要作用。2. **可视化真实值和预测值**:通过绘图来比较真实值和预测值,判断模型的准确性。2. **输入门(Input gate)**:决定当前的输入信息对细胞状态的影响。1. **细胞状态(Cell state)**:保持信息在时间步之间的传递。

qq_45441438的博客 2056

wcf 调用wcf_使用WCF打破所有规则

wcf 调用wcfSometimes, in my job, I go onsite at partners and work with them, sometimes architecturally, sometimes doing proofs of concepts to make sure they're comfortable with things working together. ...

cunfuxiao7305的博客 263

同花顺Supermind量化交易 风险控制建模--海龟交易法则

A.市场与标的海龟交易法则应用于流动性高的市场中,选择交易量较大的标的进行交易。本文以沪深300指数ETF为标的,构建海龟交易法则。B、仓位:仓位是海龟交易系统最核心的部分,通过ATR真实波幅指标来管理仓位。第一步:计算True Range,简称TR。TR = Max ( H−L , H−P , P−L ) ,其中H为当日日内最高价,L为当日日内最低价,P为前一日收盘价。第二步:计算ATRATR = mean ( TR , 20 ) , 即计算过去20天的TR的平均值,ATR是TR的移动平均值。

qq_22808537的博客 1497

用c++生成随机迷宫_自动生成随机迷宫(1)prim算法

“程序 = 数据 + 算法”,一款好的作品不单单是代码的堆砌,还有其灵魂的部分,那就是算法;算法是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。算法既然是解决某类型问题的规范,那么我们就学习它,并在我们的作品中使用它。从这一期开始做一个迷宫系列,包括用算法生成随机迷宫,用算法自动寻址走迷宫。 三大迷宫生成算法之一“随机Prim算法不是...

weixin_31787547的博客 2601

WCF热门问题编程示例(2)多个实例调用一个WCF服务操作,需要等待服务响应吗

Posted on 2009-06-27 02:22 Frank Xu Lei 阅读(1560) 评论(9)  编辑 收藏 网摘 所属分类: SOA and EAI, WCF热门问题编程示例 <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http

微软特邀讲师 老徐FrankXuLei 的专栏 1268

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

WCF热门问题编程示例(1):WCF服务如何获得客户端IP地址信息

今天新开了一个系列文章《WCF热门问题编程示例》:主要是针对WCF里比较有价值的问题的收集和整理,进行分析和 编程实践。最后会给出具体的示例代码。这个系列的第一篇文章:WCF热门问题编程示例(1):WCF服务如何获得客户端IP地址信息。这个问题是在MSDN中文论坛一个网友xiaochong4提出的,原文是: 服务端通过getcallbackchannel可以取得回调的引用,...

dianzudi1839的博客 134

Python 陌生代码库阅读之道:从零起步到一周掌控 5 万行老项目的实战策略

文中特别强调"自顶向下+画图+注释"的基础阅读心法,并提供了具体的代码示例和命令行技巧。对于大型项目,建议先建立核心流程的骨架认知,再逐步填充细节,同时注重文档化和测试覆盖率的提升。 掌握这套方法后,开发者可以将陌生代码库的阅读效率提升3倍以上,在一周内建立起对5万行级别项目的整体掌控力。

铭渊老黄 507

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1411

WCF热门问题编程示例(5):WCF服务如何获取客户端在线用户数量?

Posted on 2010-08-27 08:00 Frank Xu Lei 阅读(2120) 评论(27)编辑收藏 所属分类: SOA and EAI, WCF热门问题编程示例WCF热门问题编程示例(5):WCF服务如何获取客户端在线用户数量?这个问题是基于WCF学习交流群的Blood提出的问题,一起讨论了下,做的测试。把相关的讨论,以及测试代码,整理成一篇博文。【1】问题分析:     这个问题,在WCF服务编程中也非常的常见,以下是对于这个问题的不同描述形式,但是本质基本类似:WCF如何获取

微软特邀讲师 老徐FrankXuLei 的专栏 1578

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WCF与AJAX编程开发实践(4):支持JSON的AJAX WCF服务

Posted on 2010-07-06 21:43 Frank Xu Lei 阅读(314) 评论(2)编辑收藏 所属分类: SOA and EAI, WCF与AJAX编程开发实践<br />    上一节学习了WCF与AJAX编程开发实践(3):支持ASP.NET AJAX的WCF服务。今天继续学习WCF与AJAX编程开发实践(4):支持JSON的AJAX WCF服务。 本文重点介绍的是如何在支持AJAX的WCF服务里使用JSON进行数据交换。这里会首先介绍JSON的基本概念,为了说明问题。

微软特邀讲师 老徐FrankXuLei 的专栏 4464

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

WCF和HTTP应用编程

WCF和HTTP应用编程HTTP简介HTTP的特点HTTP的请求与响应HTTP应用编程的技术选择WCF中与HTTP相关的绑定基本HTTP绑定(BasicHttpBinding类)其他常用的HTTP绑定WCF客户端和服务端的消息交换模式请求应答模式(Action/Reply)单向模式(IsOneWay)双工通信同步操作和异步操作WCF和HTTP编程示例五子棋游戏规则描述服务端和客户端通信接口服务端编...

万事胜意 1453

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

构建WCF RESTful service示例

今天来分享一下如何建立一个关于建立WCF RESTful service的示例, REST(Representational State Transfer)是一种轻量级的Web Service架构,操作比传统的基于Operation操作的WCF service和Web service更为简洁实用,可以完全通过HTTP协议实现,还可以通过缓存来提高相应速度,性能效率和易用性上都要优于SOAP协议,所

Arwind的专栏 9234
上一篇: 『飞秋』小项目心得交流
下一篇: 『飞秋』Windows7新功能体验(1):为Windows 7 Media Center安装网络电视(Internet TV)
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值