博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
享受无止境 - 改进版WCF Client
阅读量:6224 次
发布时间:2019-06-21

本文共 1718 字,大约阅读时间需要 5 分钟。

在之前的文章“”中,分别用Func与Action实现了WCF客户端调用接口。

Func实现的调用方式:

WcfClient.UseService((IUserService userService) => (userService.GetUser(userId)));

缺点:

1. 需要用匿名方法传递参数,写起来比较麻烦。

2. 不支持无返回值的ServiceContract。

Action实现的调用方式:

List
docs = null; WcfClient.UseService
( s => {
docs = s.GetZzkDocuments("0", 30).ToList(); });

缺点:

虽然支持了无返回值的ServiceContract,但需要在Lambda表达式中获取返回值。这样还造成了无法使用类型判断,也就是不能使用var docs。

用Action“享受”了很多次的过程中,总是有那么一点点“不爽”萦绕在心头,挥之不去。。。

 

2011即将过去,2012即将到来,在这辞旧换新之际,也把那一点点“不爽”辞去吧。

今天下午,借助.NET世界中一个强大的武器完成了这个小小的心愿,它就是表达式树 —— Expression<Func<TService, TReturn>> operation

先一睹调用改进版WCF Client的风采:

var client = new WcfClient
(); var docs = client.UseService(s => s.GetZzkDocuments("0", 10));

然后看看WcfClient的实现代码:

public class WcfClient
where TService : class {
public TReturn UseService
(Expression
> operation) {
var channelFactory = new ChannelFactory
("*"); TService channel = channelFactory.CreateChannel(); var client = (IClientChannel)channel; client.Open(); TReturn result = operation.Compile().Invoke(channel); try {
if (client.State != CommunicationState.Faulted) {
client.Close(); } } catch {
client.Abort(); } return result; } }

对于Expression<Func<TService, TReturn>> operation,我的理解是:请你告诉我,如果给你一段代码(TService),你如何给我一个改变了的世界(TReturn)。我不关心给你的是什么代码,也不关心改变后的世界是什么样子,我只关心你如何改变世界。

 

享受无止境,但真正让人成长与快乐的不是得到那个享受,而是这个追求享受的过程。现实世界如此,代码世界也是如此。

祝大家2012年在代码世界享受更多快乐!

 

参考文章:

转载于:https://www.cnblogs.com/dudu/archive/2011/12/31/wcfclient.html

你可能感兴趣的文章
离职辞职终极指南
查看>>
关于IP和PV的知识
查看>>
linux CentOS6.5 yum安装mysql 5.6
查看>>
《跟我学Shiro》
查看>>
MQL:资金管理语句块
查看>>
spring boot 枚举类转换
查看>>
Java动态代理
查看>>
2016年12月22日 阿里云技术分享
查看>>
Laravel 中简约而不简单的 Macroable 宏指令
查看>>
Essential Studio for JavaScript发布2017 v3版本,支持统计图表
查看>>
Rancher 2.0 的第一印象
查看>>
mysql 导出select语句结果到excel文件等 一、导出数据外部
查看>>
简单易用的东西
查看>>
CRC循环冗余校验码
查看>>
最近有人说我欺骗消费者,今天来一波视频分享
查看>>
12306买票难的一些思考
查看>>
SQL 总结
查看>>
我所理解的JVM(二):类加载机制
查看>>
sql语句查询某表里是否存在重复数据
查看>>
linux shell
查看>>