• NET异步调用Webserver


    之前,有个同事跑来问我一堆的什么多线程异步进行调用Sap的服务再突然把进程关闭,还说要设置一个循环判断调用的结果,搞得我听的一头雾水,但是我明显感觉到他的设计思路已经渐行渐远了...已经再偏远的山区中没有车回来了!无奈 作为了公司新人,我理清了他的需求,就是因为不懂异步调用webserver ,或者说调用了不懂怎么回调函数的事件构造,或者说sap实在太懒,无法给与任何返回,也没法给与返回。反正不懂 NET开发 和SAP开发 那边有问题,反正 是真的有问题了!

    就这样的前提下,三四个人来找我...问我之前做的什么异步调用SAP服务的,其实我偏爱同步啊,哈哈·  ~   而且网上信息都是一些比较笼统的说,不讲究思维和官网的事件剖析。不利于我这种小生学习掌握~~

    然后告诉了他的思路设计错误,  我本人是很讨厌那种需要别人源码发给对方的人,不过也算了,凡是自己的思维设计上方向是错的,有一点是可以让旁人很清楚的:那就是这个人描述起来是十分复杂,混乱的一个代码处理逻辑,也会有很多莫名其妙的东西出现。

    前后经历过几个团队的成长,我曾经鼓励自己要了解团队中大家的思维,这样彼此能够更好的互补 做好这个团队, 但是这人也不是我的部门的,尽力帮忙了~

    示例调用委托事件分别有:

      onBeginHelloWorldDelegate、onEndHelloWorldDelegate、onHelloWorldCompletedDelegate:开始, 结束,提交后。 

    Net底层调用委托:

      ClientBase<TChannel>.BeginOperationDelegate   ;ClientBase<TChannel>.EndOperationDelegate  ;SendOrPostCallback :被调度到同步上下文时要调用的方法

      

    所以异步如果你想要处理 回调与批量调用间的关系,很简单,可以用HelloWorldAsync重载函数 (string arg, object userState)   userState 将会从InvokeAsync带到,TestWebService.HelloWorldCompletedEventArgs e:

    调用代码:   testwebservice.HelloWorldAsync(para.name, para);  ----para为调用要给的回调标识实体。

     

    所以,这样通过这些委托事件的绑定,重载  是可以做到任何个回调或执行开始 结束的 业务处理,也可以自己在该服务命名空间拓展更多复杂的委托 事件回调;

     

     

    案例分析:

      Net异步调用服务并委托回调收集;第一,要调用的服务不进行任何返回结果;第二,我们要把握好任何执行结果,不排除对方服务关闭;第三, 一定要异步、多线程(存在技术盲,一听异步多线程就觉得好)。

      方案一: 从代理类进行构造委托进行回调,在async函数中进行委托事件的回调。从头到脚自立一套委托事件的声明,爱啥参数就啥参数 爱怎么瞎搞都行。 在system.threading中定义一个委托SendOrPostCallbackTwo及在System中定义一个EventhandlerTwo委托,

    在服务代理生成类中进行事件声明 event_A,及进行构造声明 OnHelloWorldCompletedTwo(object state,object entity)函数,

     

    在异步调用函数HelloworldAsync中 附加事件判断或实现,

    在HelloWorldCompletedEventArgsTwo中进行构造函数:

    代理类调用方式:

    回调函数ProcessCompleteThree:

    预备的线程池委托类的声明:

     

    线程池调用:

    其实这个方案就是运用委托事件去实现,但是有的人一看到web服务引入生成的那个代理对象里面乱乱的就好好研究他的机制,一般不会采用如此麻烦的回调构造。 

     

    方案2是利用线程池委托类的构造函数进行,参数带入,这样在回调的时候就知道什么主键进行业务处理了。

     

    还有方案3是利用上图中的e.UserState ,   这个是在服务生成对象中的Completed中就会自动生成的, 原理与方案1一样 。 

    不多加说明了。 

     

    仅作学习之用,转载请注明出处 。

     

  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/9546-blog/p/AysncClientWebServer.html
Copyright © 2020-2023  润新知