zoukankan      html  css  js  c++  java
  • WebService的调用

      今天测试用代码如何去调用WebService,因为之前都是直接vs直接引用,网上搜索的很多也并没有讲清楚,搞得一直不得劲。其实基元对象(string/int等)的调用倒是挺简单的,根据方法名赋值传参就可以了,一直搞不定的是自定义对象的访问。最后终于发现还是要仔细看WebService的方法描述说明呀。

      先定义一个WebService方法:

    发布后,打开WebService地址,我们点击查看方法的描述

    可以看到一共有三种访问方法的方式:soap1.1,soap1.2,http post

     灰色的描述其实已经告诉我们访问的方式。包括content-type,headers需要的参数等。我今天一直困在http post传复杂对象的问题上,后来查看对应的方法描述后才发现传递复杂对象是没有http post的访问方式的。对于所有的WebService方法,都可以用soap的方式进行访问,我们需要做的只是了解xml的格式然后传过去就可以了。

      以下代码描述如何通过代码访问WebService,报文xml内容请参照灰色部分方法描述:

     1             var xml = "your xml";
     2             var bytes = Encoding.UTF8.GetBytes(xml);
     3             var url = "your url";//注意,是webservice入口,不是方法入口,如:http://localhost:19546/WebService.asmx
     4             var request = (HttpWebRequest)WebRequest.Create(url);
     5             request.Method = "POST";
     6             request.ContentType = "text/xml; charset=utf-8";//参照方法描述给
     7             request.Accept = "text/html,application/xhtml+xml,application/xml";
     8             //request.Headers.Add("SOAPAction", url);//根据描述判断是否需要加上
     9             request.ContentLength = bytes.Length;
    10             var reqStream = request.GetRequestStream();
    11             reqStream.Write(bytes, 0, bytes.Length);
    12             reqStream.Close();
    13             var rep = request.GetResponse();
    14             var stream = rep.GetResponseStream();
    15             System.IO.StreamReader sr = new System.IO.StreamReader(stream);
    16             var ret = sr.ReadToEnd(); //ret 返回值也是xml格式,可以自行序列话成对象
  • 相关阅读:
    vue内置指令与自定义指令
    javascript全局方法与变量
    javascript继承
    promise对象
    javascript函数节流(throttle)与函数去抖(debounce)
    Mysql Explain 解读(基于MySQL 5.6.36)
    Mycat之日志分析跨分片事务以及存储过程的执行过程
    Mycat之日志分析 select * from travelrecord order by id limit 100000,100 的执行过程
    Mycat实战之离散分片
    Mycat实战之连续分片
  • 原文地址:https://www.cnblogs.com/jidanfan/p/6679092.html
Copyright © 2011-2022 走看看