WebService积累

1、缺点,无法传输复杂对象:如无法序列化key/value结构的类型参数以及相关一维集合接口(Hashtable等打上标签[Serializable]即可序列化,不过继承的IDictionary并不可以序列化)

 
 
 
 
2、可使用wcftestclient工具测试webservice。
 
 
3、WebService可以传递out参数。
 
out  关键字会导致参数通过 引用(传递地址) 来传递。 这与  ref  关键字类似,不同之处在于  ref  要求变量必须在传递之前进行初始化。
原本以为在rpc场景中接口存在out 关键字的参数根本是没有作用的,rpc已跨进程或跨服务器,而out仅是将参数以引用的方式传递调用方(客户端)进程中内存地址。经过实验,webservice支持以引用的方式传递参数,推测是服务端返回数据(基础数据为XML格式,需要返回给客户的数据有专门的格式),再在客户端生成的代理类进行赋值。
 
1、无返回值有一个参数带out关键字,webservice是已返回值方式将值赋予参数。
 
服务端:
        [  WebMethod (Description =  "测试out"  )]
         public  void  TestOut( out  string  msg)
        {
            msg =  @"远程调用已经跨进程或服务器了,你还想通过我返回信息? 你做梦吗?
                   我只是在同进程中以指针地址传递,将消息写到该地址,以便在同进程的调用方能读到,而你已经跨进程或服务器了,你还想找我!!!!
                    不过好像webservice会转换为返回值返回"  ;
             return ;
        }
 
客户端:
          public  string  TestOut() {
             return  base  .Channel.TestOut();
        }
 
 
2、有返回值且多个参数都是带有out关键字
 
服务端:
 
        [  WebMethod (Description =  "测试out及ref"  )]
         public  string  TestOutAndRef( out  string  msg,  out  string  msg1,  ref  string  msg2)
        {
            msg =  @"远程调用已经跨进程或服务器了,你还想通过我返回信息? 你做梦吗?
                   我只是在同进程中以指针地址传递,将消息写到该地址,以便在同进程的调用方能读到,而你已经跨进程或服务器了,你还想找我!!!!"  ;
            msg1 =  @"webservice 好像会转换为返回值返回。"  ;
            msg2 =  "我打酱油的"  ;
             return  "ok"  ;
        }
 
客户端:
 
          public  string  TestOutAndRef( out  string  msg,  out  string  msg1,  ref  string  msg2) {
             return  base  .Channel.TestOutAndRef( out  msg,  out  msg1,  ref  msg2);
        }
 
 
 
MSDN说明:
 

进行 XML Web 服务调用时发生的过程与进行常规方法调用时发生的过程类似。主要的差别在于,不是调用位于客户端应用程序中的方法,而是通过指定的传输(如 HTTP)生成请求消息。由于 XML Web 服务方法可能位于另一台计算机上,因此 XML Web 服务处理请求所需的信息必须通过网络传递给承载 XML Web 服务的服务器。XML Web 服务处理此信息并通过网络将结果发送回客户端应用程序。

下图显示客户端和 XML Web 服务之间的通信过程。

XML Web 服务生存期

下面描述调用 XML Web 服务时发生的事件序列:

  1. 客户端创建 XML Web 服务代理类的一个新实例。该对象驻留在客户端所在的同一台计算机上。

  2. 客户端调用代理类上的方法。

  3. 客户端计算机上的基础结构将 XML Web 服务方法的参数序列化为 SOAP 消息,并通过网络将其发送给 XML Web 服务。

  4. 基础结构接收 SOAP 消息并反序列化该 XML。它创建实现 XML Web 服务的类的实例并调用 XML Web 服务方法,同时将反序列化的 XML 作为参数传入。

  5. XML Web 服务方法执行其代码,最终会设置返回值和任何输出参数(ref及out)

  6. Web 服务器上的基础结构将返回值和输出参数序列化为 SOAP 消息,并通过网络将其发送回客户端。

  7. 客户端计算机上的 XML Web 服务基础结构接收该 SOAP 消息,将 XML 反序列化为返回值和任意输出参数,并将其传递给代理类的实例。

  8. 客户端接收返回值和任何输出参数。

生成 XML Web 服务

创建 XML Web 服务类似于创建任何提供对其应用程序逻辑的编程访问的组件。要创建一个 XML Web 服务,您需要一些功能来构成这一要公开的服务,需要一个服务描述来定义如何使用该服务,并需要一个基础结构来支持请求的接收和处理以及响应的发送。值得庆幸的是,已经为您提供了所需基础结构的很大一部分。

生成 XML Web 服务客户端

由于 XML Web 服务可以使用 URL、HTTP 和 XML 进行访问,这就意味着在任何平台上以任何语言运行的程序都可以访问 XML Web 服务。由于 XML Web 服务的分散式性质,使客户端和 XML Web 服务能够作为自治单元运行,因此,使用 XML Web 服务的方法数不胜数。例如,对 XML Web 服务的调用可以包含在 Web 应用程序、中间件组件甚至其他 XML Web 服务中。无论 XML Web 服务客户端采用何种形式,调用 XML Web 服务所需的全部条件就是,按照 XML Web 服务已发布的服务描述发送格式正确的请求消息。根据 XML Web 服务的性质,它可能会发送响应消息作为回应。然后,发出请求的一方必须能够从该消息中提取必要的信息。

 

转载于:https://www.cnblogs.com/jueye/p/WerService.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值