|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说句实话,net网页编程跨平台根本就不是外行人想想的那种,一次编译,处处运行。比来,博客园博客批评、博问回覆、闪存城市呈现一样的成绩,偶然提交出格慢,乃至一次提交长达6秒摆布。
经由过程日记剖析发明,引发速率慢的操纵产生在挪用WCF服务时。好比,我在一篇博文中宣布了一个批评,批评内容被保留到数据库以后,还会挪用WCF服务,天生一条“博客批评”静态,如许在园子里存眷我的人就可以看到这条静态。
因为静态的操纵频仍,数据量年夜,是一个绝对耗时的操纵,我们但愿这个操纵不要影响以后程序的实行,以是,接纳异步操纵是一个公道的选择。并且这是一个不必要前往值的异步操纵。
我们想固然地在WCF客户端天生代办署理类时选择了“Generateasynchronousoperations”,天生了客户端异步操纵的代办署理类,然后挪用异步办法client.AddAsync()。
但是,接纳如许的异步伐用以后,发明成绩仍然存在。
这类异步伐用办法叫“异步信道挪用”:客户端经由过程绑定创立的信道向服务端发送动静,从而完成了对服务的挪用,不论动静经由过程信道向服务端发送的体例是同步的(接纳哀求-复兴MEP举行动静互换)仍是异步的(接纳单向MEP举行动静互换),客户端程序都能够经由过程代办署理对象异步地挪用信道,从而完成异步服务挪用; 欲解概况,请移步Artech的博客...-》WCF手艺分析之十一:异步操纵在WCF中的使用(上篇)。
这个异步伐用是针对信道(Channel)的,与服务端有关,也就是WCF客户端改成异步以后,服务端不必要作任何修正。
此路欠亨,只能绕行...
因而,我们改用WCF服务端异步,正确的说法是“异步服务虚现”(服务端在详细完成服务操纵的时分,接纳异步伐用的体例。-援用自异步操纵在WCF中的使用(上篇))。怎样完成呢?碰到WCF成绩,固然要往园子里当之无愧的WCF专家博客。参考了WCF手艺分析之十一:异步操纵在WCF中的使用(下篇),我们服务真个WCF也异步了。
但是,欣喜没有呈现,成绩仍旧。
此路仍是欠亨,只能持续绕行,成绩是往那里绕?
我们经由过程测试进一步确认了成绩,在WCF服务端完成办法中间接将以后线程sleep:经由测试发明,不论客户端是同步还异步,服务端是同步仍是异步,都跳不外这个Sleep工夫。岂非是我们对这里的异步了解错了?(厥后发明,切实其实是了解错了)
碰到手艺困难找Google,Google一样平常找StackOverflow(这两人情感很好),找到一个线索:
本来,之前的办法不论用甚么步,都要等服务真个办法实行全体完成,而异步只是在刊行异步伐用以后,不必干等,能够干其他事变。但全部实行仍是要等异步办法实行完成并前往。
而我们的需求就倡议异步伐用以后,就走人,不论实行了局怎样,如许才干包管异步伐用对以后程序的实行速率影响最小。
而WCF已思索了这个需求,供应懂得决计划:[OperationContract(IsOneWay=true)],见上图中的代码。
转头看看Artech的文章,也提到了这个:单向(One-way)动静互换:客户真个信道经由过程单向的动静互换形式向服务端发送动静,动静一旦到达传输层即刻前往,从而到达异步服务挪用的效果。 绕行两次,终究走上邪道!
接纳IsOneWay办理计划后,成绩即刻办理。
必要注重的中央:
- 标志为[OperationContract(IsOneWay=true)]的办法前往值必需为void。
- WCF客户端要从头天生代办署理类。
小结
在碰到成绩并举行办理的时分,是进修效力最高、进修热忱最高的时分,不要稳扎稳打,将成绩相干的常识了解透了,办理办法会俄然而至。成绩办理以后,写一篇博客,将在办理成绩过程当中学到的常识收拾一下,将零星的常识点构造起来,你将会有更进一步的劳绩。
在办理成绩中进修,在办理成绩后分享,在进修与分享中发展!
前天傍晚我发表了《net网页编程的跨平台就是一句谎言。》,原本就是周末闲来无事,发表一篇略带争议性的博文让大家都来吵吵架,发表自己的看法,根本就没想着谁把谁打倒,一个行业或者是技术阵营是无法用短期口水仗打到对手的。 |
|