|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!在之前的文章“让WCF客户真个“挪用”成为一种‘享用’”中,分离用Func与Action完成了WCF客户端挪用接口。
Func完成的挪用体例:- WcfClient.UseService((IUserServiceuserService)=>(userService.GetUser(userId)));
复制代码 弱点:
1.必要用匿名办法传送参数,写起来对照贫苦。
2.不撑持无前往值的ServiceContract。
Action完成的挪用体例:- List<ZzkDocument>docs=null;WcfClient.UseService<IZzkDocumentService>(s=>{docs=s.GetZzkDocuments("0",30).ToList();});
复制代码 弱点:
固然撑持了无前往值的ServiceContract,但必要在Lambda表达式中猎取前往值。如许还形成了没法利用范例判别,也就是不克不及利用vardocs。
用Action“享用”了良多次的过程当中,老是有那末一点点“不爽”环绕在心头,挥之不往。。。
2011行将已往,2012行将到来,在这辞旧换新之际,也把那一点点“不爽”辞往吧。
明天下战书,借助.NET天下中一个壮大的兵器完成了这个小小的希望,它就是表达式树——Expression<Func<TService,TReturn>>operation
先一睹挪用改善版WCFClient的风度:- varclient=newWcfClient<IZzkDocumentService>();vardocs=client.UseService(s=>s.GetZzkDocuments("0",10));
复制代码 然后看看WcfClient的完成代码:- publicclassWcfClient<TService>whereTService:class{publicTReturnUseService<TReturn>(Expression<Func<TService,TReturn>>operation){varchannelFactory=newChannelFactory<TService>("*");TServicechannel=channelFactory.CreateChannel();varclient=(IClientChannel)channel;client.Open();TReturnresult=operation.Compile().Invoke(channel);try{if(client.State!=CommunicationState.Faulted){client.Close();}}catch{client.Abort();}returnresult;}}
复制代码 关于Expression<Func<TService,TReturn>>operation,我的了解是:请你告知我,假如给你一段代码(TService),你怎样给我一个改动了的天下(TReturn)。我不体贴给你的是甚么代码,也不体贴改动后的天下是甚么模样,我只体贴你怎样改动天下。
享用无尽头,但真正让人发展与康乐的不是失掉谁人享用,而是这个寻求享用的历程。实际天下云云,代码天下也是云云。
祝人人2012年在代码天下享用更多康乐!
参考文章:
ExplainingExpression
前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。 |
|