• 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格式,可以自行序列话成对象
  • 相关阅读:
    Delphi 日期函数列表
    Delphi Copy 函数 和 Pos函数
    delphi xe10 手机程序事件服务操作、退出键操作
    delphi xe10 安卓设备信息
    delphi xe10 获取屏幕截图
    Battery electric vehicles (BEVs) 快充技术
    短波红外(SWIR)相机camera
    多核片上系统(SoC)架构的嵌入式DSP软件设计
    工业4.0是个白日梦吗?
    电子设计搜索引擎引入分析和见解
  • 原文地址:https://www.cnblogs.com/jidanfan/p/6679092.html
Copyright © 2020-2023  润新知