C# 利用Http Get,Post,Soap调用WebService

Comparator几种方法的详细用法 在上面的例子中,我们首先创建了一个包含多个字符串和null的List,然后使用nullsLast方法创建了一个自然顺序比较器,并将其传递给Collections.sort方法,以便对List进行排序。Comparator中的nullsLast方法用于定义当比较的对象为null时,应该如何进行比较。Comparator是Java中的一个接口,它定义了用于比较两个对象的方法。如果两个对象相等,则返回true;可以看到,在排序后的List中,所有的字符串都按照自然顺序进行排列,而null值则被排在了最后面。 阅读详情

原文地址:http://www.cnblogs.com/Fooo/p/5507153.html
http://blog.youkuaiyun.com/chlyzone/article/details/8210718
该方法是是最为灵活的方法。

using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace Bingosoft.RIA.Common
{
    /// <summary>
    ///  利用WebRequest/WebResponse进行WebService调用的类
    /// </summary>
    public class WebServiceCaller
    {
        #region Tip:使用说明
        //webServices 应该支持Get和Post调用,在web.config应该增加以下代码
        //<webServices>
        //  <protocols>
        //    <add name="HttpGet"/>
        //    <add name="HttpPost"/>
        //  </protocols>
        //</webServices>

        //调用示例:
        //Hashtable ht = new Hashtable();  //Hashtable 为webservice所需要的参数集
        //ht.Add("str", "test");
        //ht.Add("b", "true");
        //XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://localhost:81/service.asmx", "HelloWorld", ht);
        //MessageBox.Show(xx.OuterXml);
        #endregion

        /// <summary>
        /// 需要WebService支持Post调用
        /// </summary>
        public static XmlDocument QueryPostWebService(String URL, String MethodName, Hashtable Pars)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            SetWebRequest(request);
            byte[] data = EncodePars(Pars);
            WriteRequestData(request, data);
            return ReadXmlResponse(request.GetResponse());
        }

        /// <summary>
        /// 需要WebService支持Get调用
        /// </summary>
        public static XmlDocument QueryGetWebService(String URL, String MethodName, Hashtable Pars)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName + "?" + ParsToString(Pars));
            request.Method = "GET";
            request.ContentType = "application/x-www-form-urlencoded";
            SetWebRequest(request);
            return ReadXmlResponse(request.GetResponse());
        }

        /// <summary>
        /// 通用WebService调用(Soap),参数Pars为String类型的参数名、参数值
        /// </summary>
        public static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars)
        {
            if (_xmlNamespaces.ContainsKey(URL))
            {
                return QuerySoapWebService(URL, MethodName, Pars, _xmlNamespaces[URL].ToString());
            }
            else
            {
                return QuerySoapWebService(URL, MethodName, Pars, GetNamespace(URL));
            }
        }

        private static XmlDocument QuerySoapWebService(String URL, String MethodName, Hashtable Pars, string XmlNs)
        {
            _xmlNamespaces[URL] = XmlNs;//加入缓存,提高效率
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
            request.Method = "POST";
            request.ContentType = "text/xml; charset=utf-8";
            request.Headers.Add("SOAPAction", "\"" + XmlNs + (XmlNs.EndsWith("/") ? "" : "/") + MethodName + "\"");
            SetWebRequest(request);
            byte[] data = EncodeParsToSoap(Pars, XmlNs, MethodName);
            WriteRequestData(request, data);
            XmlDocument doc = new XmlDocument(), doc2 = new XmlDocument();
            doc = ReadXmlResponse(request.GetResponse());

            XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
            mgr.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
            String RetXml = doc.SelectSingleNode("//soap:Body/*/*", mgr).InnerXml;
            doc2.LoadXml("<root>" + RetXml + "</root>");
            AddDelaration(doc2);
            return doc2;
        }
        private static string GetNamespace(String URL)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL + "?WSDL");
            SetWebRequest(request);
            WebResponse response = request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(sr.ReadToEnd());
            sr.Close();
            return doc.SelectSingleNode("//@targetNamespace").Value;
        }

        private static byte[] EncodeParsToSoap(Hashtable Pars, String XmlNs, String MethodName)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"></soap:Envelope>");
            AddDelaration(doc);
            //XmlElement soapBody = doc.createElement_x_x("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
            XmlElement soapBody = doc.CreateElement("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
            //XmlElement soapMethod = doc.createElement_x_x(MethodName);
            XmlElement soapMethod = doc.CreateElement(MethodName);
            soapMethod.SetAttribute("xmlns", XmlNs);
            foreach (string k in Pars.Keys)
            {
                //XmlElement soapPar = doc.createElement_x_x(k);
                XmlElement soapPar = doc.CreateElement(k);
                soapPar.InnerXml = ObjectToSoapXml(Pars[k]);
                soapMethod.AppendChild(soapPar);
            }
            soapBody.AppendChild(soapMethod);
            doc.DocumentElement.AppendChild(soapBody);
            return Encoding.UTF8.GetBytes(doc.OuterXml);
        }
        private static string ObjectToSoapXml(object o)
        {
            XmlSerializer mySerializer = new XmlSerializer(o.GetType());
            MemoryStream ms = new MemoryStream();
            mySerializer.Serialize(ms, o);
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(Encoding.UTF8.GetString(ms.ToArray()));
            if (doc.DocumentElement != null)
            {
                return doc.DocumentElement.InnerXml;
            }
            else
            {
                return o.ToString();
            }
        }

        /// <summary>
        /// 设置凭证与超时时间
        /// </summary>
        /// <param name="request"></param>
        private static void SetWebRequest(HttpWebRequest request)
        {
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Timeout = 10000;
        }

        private static void WriteRequestData(HttpWebRequest request, byte[] data)
        {
            request.ContentLength = data.Length;
            Stream writer = request.GetRequestStream();
            writer.Write(data, 0, data.Length);
            writer.Close();
        }

        private static byte[] EncodePars(Hashtable Pars)
        {
            return Encoding.UTF8.GetBytes(ParsToString(Pars));
        }

        private static String ParsToString(Hashtable Pars)
        {
            StringBuilder sb = new StringBuilder();
            foreach (string k in Pars.Keys)
            {
                if (sb.Length > 0)
                {
                    sb.Append("&");
                }
                //sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));
            }
            return sb.ToString();
        }

        private static XmlDocument ReadXmlResponse(WebResponse response)
        {
            StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
            String retXml = sr.ReadToEnd();
            sr.Close();
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(retXml);
            return doc;
        }

        private static void AddDelaration(XmlDocument doc)
        {
            XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
            doc.InsertBefore(decl, doc.DocumentElement);
        }

        private static Hashtable _xmlNamespaces = new Hashtable();//缓存xmlNamespace,避免重复调用GetNamespace
    }
}

soap调用示例:

Hashtable ht = new Hashtable();
ht.Add("str", "test");
ht.Add("b", "true");
XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://localhost:81/service.asmx", "HelloWorld", ht);
MessageBox.Show(xx.OuterXml);

这个类有三个公用的方法:QuerySoapWebService为通用的采用Soap方式调用WebService,QueryGetWebService采用GET方式调用,QueryPostWebService采用POST方式调用,后两个方法需要WebService服务器支持相应的调用方式。三个方法的参数和返回值相同:URL为Webservice的Url地址(以.asmx结尾的);MethodName为要调用的方法名称;Pars为参数表,它的Key为参数名称,Value为要传递的参数的值,Value可为任意对象,前提是这个对象可以被xml序列化。注意方法名称、参数名称、参数个数必须完全匹配才能正确调用。第一次以Soap方式调用时,因为需要查询WSDL获取xmlns,因此需要时间相对长些,第二次调用不用再读WSDL,直接从缓存读取。这三个方法的返回值均为XmlDocument对象,这个返回的对象可以进行各种灵活的操作。最常用的一个SelectSingleNode方法,可以让你一步定位到Xml的任何节点,再读取它的文本或属性。也可以直接调用Save保存到磁盘。采用Soap方式调用时,根结点名称固定为root。
这个类主要是利用了WebRequest/WebResponse来完成各种网络查询操作。为了精简明了,这个类中没有添加错误处理,需要在调用的地方设置异常捕获。
下面是一个调用实例:
protected void Page_Load(object sender , EventArgs e)
…{
try
…{
Hashtable pars = new Hashtable();
String Url = “http://www.260dns.cn/Services/Weather.asmx“;
pars[“city”] = “上海”;
pars[“wdate”]=”2008-3-19”;
XmlDocument doc = WebSvcCaller.QuerySoapWebService(Url , “GetWeather” , pars);
Response.Write(doc.OuterXml);
}
catch (Exception ex)
…{
Response.Write(ex.Message);
}
}

【华为OD机试真题】2、在字符串中找出连续最长的数字串含+-号 | 机试真题+思路参考+代码解析(C++、Java、Py) 题目描述 >请在一个字符串中找出连续最长的数字串,并返回这个数字串。 如果存在长度相同的连续数字串,返回最后一个。 如果没有符合条件的字符串,返回空字符串””。   注意: 数字串可以由数字”0-9″、小数点”.”、正负号”±”组成,长度包括组成数字串的所有符号。 “.”、“±”仅能出现一次,”.”的两边必须是数字,”±”仅能出现在开头且其后必须要有数字。 长度不定,可能含有空格 阅读详情

相关推荐

OPC UA 服务端的模拟工具及客户端工具

详细介绍如何使用 Prosys OPC UA Simulation Server 作为 OPC UA 服务端的模拟工具来生成数据模型,并使用 Softing OPC UA Client 作为客户端工具,直观地查看和验证模拟生成的数据。

weixin_44462773的博客 9852

【java常用接口】Comparator学习

它可以用于对集合中的对象进行排序,或者用于自定义排序算法。

JZJ_LYH的博客 4445

手把手教你搞定爱思唯尔LaTeX投稿:从模板到PDF生成的全流程避坑指南

本文详细介绍了使用LaTeX投稿爱思唯尔期刊的全流程避坑指南,包括模板选择、文件结构规范、投稿系统文件上传策略、PDF生成与检查等关键步骤。特别强调了避免常见错误如宏包冲突、图片丢失和参考文献问题,并提供了投稿后的应急方案和高阶自动化校验脚本,帮助研究者顺利完成投稿。

weixin_42525289的博客 506

JAVA语言-比较器Comparator

Comparator 是javase中的接口,位于java.util包下。数组工具类和集合工具类中提供的工具方法sort方法都给出了含有Comparator接口的重载方法。List实例调sort方法// 将英文字母先排序好@Override});使用总结:在可以使用 Comparator实例 的地方,new Comparator 然后覆写compare方法即可。

qq_58148854的博客 9790

BDD测试之Behave使用入门

BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。

想要成为酷盖但是失败的小明 580

对称加密和非对称加密、公钥和私钥、单向认证和双向认证、数字签名、数字证书、根证书

文章目录1. 什么是公钥和私钥?2. 加密算法2.1 对称加密2.2 非对称加密2.2.1 非对称加密的重要性质2.2.2 非对称加密算法应用2.2.2.1 应用1 加密通信2.2.2.1.1 单向认证和双向认证2.2.2.1 应用2 数字签名3. 数字签名3.1 数字签名用法演示3.2 数字签名存在问题4. 数字证书(Digital Certificate)4.1 创建数字证书4.1.1 举例,CA如何给我们签发一个有效证书: 1. 什么是公钥和私钥? 摘自《什么是公钥和私钥?》 公钥(Public Ke

m0_45406092的博客 1万+

java中的comparator_Java中Comparator的使用

Comparable与Comparator的区别Comparable & Comparator都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法或在集合内实现 Comparable接口的方法,Comparator位于包java....

weixin_42350865的博客 2万+

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

Java中的比较器(Comparator)

Comparator接口中有一个compare()方法,它接受两个对象作为参数,并返回一个int值,表示它们的顺序。在这个例子中,我们定义了一个StringComparator类,实现了Comparator接口中的compare()方法,用于按字典序比较两个字符串的大小。例如,如果我们希望在一个Set中保存自定义对象,而这些对象的相等性不是基于对象的引用相等,而是基于对象的某些属性相等,我们可以使用Comparator来实现equals()和hashCode()方法。

weixin_64353239的博客 4885

微信服务号配置总是提示“参数错误”?我就是这样一步步查出问题的

前两天,我遇到了一个很诡异的问题:在微信服务号后台配置服务器地址时,总是提示“参数错误,请重新填写”。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1276

【超详细】计算机操作系统总结及思维导图(汤子瀛版)

计算机操作系统 一.操作系统引论 1.操作系统的目标和功能 目标 方便性 有效性 提高系统资源利用率 提高系统吞吐量 可扩充性 开放性 作用 OS作为用户与计算机硬件系统之间的接口 命令方式 系统调用方式 图标–窗口方式 OS实现了对计算机资源的抽象 2.操作系统的发展过程 未配置操作系统的计算机系统 人工操作方式 用户独占全机 CPU等待人工操作 严重降低...

圣三一 2万+

【对象的比较】java代码实现,详解对象的比较,Comparable接口和Comparator比较器

【对象的比较】java代码实现,详解对象的比较,Comparable接口和Comparator比较器

程序员良辰 1924

数据权限设计

随着IT新技术不断完善成熟,企业数字化建设得到全面的发展,数据将成为一个创造财富的重要来源,并且越来越多地被视为一项值得重视的企业资产。未来,很多企业之间的竞争,其实也是资源和数据竞争。那么针对数据资产,如何保障它的安全性呢?数据的权限管理无疑是必不可少的。数据权限从数据源来控制不同的用户能够查看、使用和授权不同的数据表数据(其实就是数据表行列的管控),就如同筑起了一道道护城墙,为数据安全提供了保障。

qq_40664711的博客 1万+

java对象比较器_使用JAVA对象比较器Comparator

Person.javapackage com.founder.common;public class Person {private String firstName;private String lastName;private boolean sex;private int age;public Person(String firstName, String lastName, boolean...

weixin_39682673的博客 186

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

JAVA对象比较器 Comparator

java中Comparator的用法:http://www.cnblogs.com/linjiqin/archive/2011/08/31/2160360.html   JAVA对象比较器Comparator:http://muscle-liu.iteye.com/blog/157261

xinqing08007的专栏 665

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java对象比较-comparable接口和comparator比较器

1.实现对对象的比较大部分是为了对数组或者集合中的对象进行排序,让他们根据一定的规则存储在数组或有序集合中 2.实现方式有两种,一种是存储的对象的类实现comparable接口,第二种是使用comparator比较器,也有人称为comparator匿名 内部类;两种方式都是通过给对象提供一个自定义的比较规则去实现对象之间的比较 3.首先了解一下比较规则 程序实现比较的核心是编写比较规则...

watsonliuwho的博客 440

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java comparator_JAVA对象比较器Comparator

public class Person {String firstname,lastname;Boolean sex;Integer age;public Person(String firstname,String lastname,Boolean sex,Integer age) {this.firstname = firstname;this.lastname = lastname;this...

weixin_39982537的博客 247

JAVA对象比较器Comparator接口

JAVA对象比较器Comparator接口 该比较器在TreeSet等地方会使用到。如        TreeSet(Comparator<? super E> comparator) : 构造一个新的空 TreeSet,它根据指定比较器进行排序。 排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序。但只是局限于简单的排序

ml1990s的专栏 1400

Java 对象排序 Comparable接口和比较器Comparator的使用

我这里使用的是Treeset存储的学生信息,定义了学生类,对学生信息进行一个排序: 方法一 对象排序的的方法是,让元素所属类实现 Comparable 接口 ,重写 comparaTo(To) 方法 方法二 Treeset中 使用匿名类的方法传递一个比较器Comparator接口 下面看代码:两种写法,看后面的实现方法! 首先定义一个学生类: public class Student{ private int age;//年龄 private String name;//姓名

布懂同学开始提问题 283

Java 面向对象编程实战:猫咪类与 Comparator 比较器解析

Java 的Comparator接口用于定义对象的比较逻辑,允许在不修改类本身的前提下实现多种排序规则,符合开闭原则(对扩展开放,对修改关闭)Java 的Comparator接口允许我们在不修改类本身的前提下,定义多种排序规则。返回负整数:表示 o1 小于 o2返回零:表示 o1 等于 o2返回正整数:表示 o1 大于 o2面向对象核心思想:通过Cat类实现数据封装,将属性与操作绑定在一起比较器模式优势:通过Comparator实现多维度排序,解耦排序逻辑与类定义Java 编程规范。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 615

深入浅出了解java比较器 区分Comparable与Comparator的差异以及对象数组的排序

比较器: 进行大小关系确定判断; 对象数组排序: String的对象数组排序: 自定义类排序 Comparable对象接口 import java.util.Arrays; class person implements Comparable<person>{ String name; int age; public person(String name, int age) { supe...

weixin_45829957的博客 177

Java中的对象比较器 Comparable接口和Comparator接口

一般的我们对于数组的排序,一般使用Arrays方法中的sort进行 int[] nums = {1,285,18,15,84,5,848}; Arrays.sort(nums); System.out.println(Arrays.toString(nums)); String[] names = {"lili","tom","明明","红红"}; Arrays.sort(names); System.out.println(Arrays.toString(names));

weixin_45765183的博客 779
上一篇: [Android] 关于系统工具栏和全屏沉浸模式
下一篇: Oracle 用户管理
BlueCY
博客等级 码龄19年 22粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值