利用WebRequest/WebResponse/Soap进行WebService调用的类

C#通过SOAP使用HttpWebRequest调用带有身份验证的WebService示例 本示例使用C#构造SOAP信息,通过HttpWebRequest调用java编写的带有Windows身份验证的WebService,代码中详细注释了每行代码的功能与作用; 对应文章:http://blog.csdn.net/cgs_______/article/details/77894599 立即下载

首先定义一个工具类:

/// <summary>
///  利用WebRequest/WebResponse/Soap进行WebService调用的类
/// </summary>
public class WebServiceHelper
{
    //<webServices>
    //  <protocols>
    //    <add name="Get"/>
    //    <add name="Post"/>
    //    <add name="Soap"/>
    //  </protocols>
    //</webServices>
    //缓存xmlNamespace,避免重复调用GetNamespace
    private static Dictionary<object,object> _xmlNamespaces = new Dictionary<object, object>();

    /// <summary>
    /// 需要WebService支持Post调用
    /// </summary>
    public static XmlDocument QueryPostWebService(string url, string methodName, Dictionary<object, object> 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, Dictionary<object, object> 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, Dictionary<object,object> pars)
    {
        if (_xmlNamespaces.ContainsKey(url))
        {
            return QuerySoapWebService(url, methodName, pars, _xmlNamespaces[url].ToString());
        }
        else
        {
            return QuerySoapWebService(url, methodName, pars, GetNamespace(url));
        }
    }

    /// <summary>
    /// 通用WebService调用(Soap)
    /// </summary>
    /// <param name="url"></param>
    /// <param name="methodName"></param>
    /// <param name="pars"></param>
    /// <param name="xmlNs"></param>
    /// <returns></returns>
    private static XmlDocument QuerySoapWebService(string url, string methodName, Dictionary<object, object> 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;
    }

    /// <summary>
    /// 通过WebService的WSDL获取XML名称空间
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    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;
    }

    /// <summary>
    /// 动态生成SOP请求报文内容
    /// </summary>
    /// <param name="pars"></param>
    /// <param name="xmlNs"></param>
    /// <param name="methodName"></param>
    /// <returns></returns>
    private static byte[] EncodeParsToSoap(Dictionary<object, object> 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("soap", "Body", "http://schemas.xmlsoap.org/soap/envelope/");
        XmlElement soapMethod = doc.CreateElement(methodName);
        soapMethod.SetAttribute("xmlns", xmlNs);
        foreach (string k in pars.Keys)
        {
            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);
    }

    /// <summary>
    /// 将对象转换成XML节点格式
    /// </summary>
    /// <param name="o"></param>
    /// <returns></returns>
    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>
    /// 设置WEB请求
    /// </summary>
    /// <param name="request"></param>
    private static void SetWebRequest(HttpWebRequest request)
    {
        request.Credentials = CredentialCache.DefaultCredentials;
        request.Timeout = 10000;
    }

    /// <summary>
    /// 设置请求数据
    /// </summary>
    /// <param name="request"></param>
    /// <param name="data"></param>
    private static void WriteRequestData(HttpWebRequest request, byte[] data)
    {
        request.ContentLength = data.Length;
        Stream writer = request.GetRequestStream();
        writer.Write(data, 0, data.Length);
        writer.Close();
    }

    /// <summary>
    /// 获取字符串的UTF8码字符串
    /// </summary>
    /// <param name="pars"></param>
    /// <returns></returns>
    private static byte[] EncodePars(Dictionary<object, object> pars)
    {
        return Encoding.UTF8.GetBytes(ParsToString(pars));
    }

    /// <summary>
    /// 将Hashtable转换成WEB请求键值对字符串
    /// </summary>
    /// <param name="pars"></param>
    /// <returns></returns>
    private static string ParsToString(Dictionary<object, object> 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();
    }

    /// <summary>
    /// 获取Webservice响应报文XML
    /// </summary>
    /// <param name="response"></param>
    /// <returns></returns>
    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;
    }

    /// <summary>
    /// 设置XML文档版本声明
    /// </summary>
    /// <param name="doc"></param>
    private static void AddDelaration(XmlDocument doc)
    {
        XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
        doc.InsertBefore(decl, doc.DocumentElement);
    }
}

 

服务代码:

        [WebMethod]
        public string HelloWorld(string key)
        {
            var list = new List<Users>();
            list.Add(new Users
            {
                Name = "张三",
                Code = "001"
            });
            list.Add(new Users
            {
                Name = "李四",
                Code = "002"
            });
            
            if(!string.IsNullOrEmpty(key))
            {
                list = list.Where(x => x.Name.Contains(key)).ToList();
            }

            return Newtonsoft.Json.JsonConvert.SerializeObject(list);
        }

调用示例:

            //构造soap请求信息
            //服务地址
            var url = "http://localhost:8077/TestWebService.asmx";
            //调用方法名
            const string methodName = "HelloWorld";
            //构建参数对象
            var hab = new Dictionary<object, object>();
            hab.Add("key", "");

            //通过Soap调用
            var xmlDoc = WebServiceHelper.QuerySoapWebService(url, methodName, hab);

            //获取返回数据
            var result = xmlDoc.InnerText;

返回结果如下:

转载地址:http://www.cnblogs.com/zuowj/p/4267585.html

 

YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025 文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。 阅读详情

相关推荐

ESP8266+Mixly+MIXIO物联网实战:用色盘控制WS2812 RGB灯(附完整代码)

本文详细介绍了如何利用ESP8266微控制器、Mixly图形化编程工具与MIXIO物联网平台,快速构建一个可通过网页色盘远程控制WS2812 RGB智能灯带的实战项目。内容涵盖硬件接线、平台配置、代码编写与调试全流程,旨在帮助物联网爱好者与初学者轻松实现创意灯光应用,掌握智能硬件开发的核心技能。

gin88的博客 261

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

原文地址:http://www.cnblogs.com/Fooo/p/5507153.html http://blog.csdn.net/chlyzone/article/details/8210718 该方法是是最为灵活的方法。using System; using System.Collections; using System.IO; using System.Net; using Sys

BlueCY 2122

ADI DSP开发环境(CCES)下的程序烧录问题(以ADSP-SC589为例)

在CCES环境下将程序烧录到flash主要有两种方式。首先在对项目编译产生文件的属性设置为Release。 在编译完成后,找到每个CORE单独生成的DXE文件: 文件通常位于项目目录下每个core的Release文件中。安装SC589评估板的驱动(ADSP-SC5xx_EZ-KIT_Lite-Rel2.0.0.exe)后,在安装目录下可以找到SPI FLASH芯片的驱动程序(sc589_w25q128fv_dpia_Core1.dxe): 把文件copy到CCES 的目录下由于SC58x处理器的特殊性

daijingxin的博客 3726

基于 SOAP消息协议的 HttpWebRequest 请求 WebService 服务接口

基于 SOAP消息协议的 HttpWebRequest 请求 WebService 服务接口 private const string Request_UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"; public static string QuerySoapWebService(string

冻死的企鹅 688

Apollo MPC横纵向耦合控制学习笔记

Apollo MPC横纵向控制原理学习笔记

weixin_39199083的博客 1万+

SDIO协议

SDIO协议1 概述  SDIO,全称:Secure Digital Input and Output ,即安全数字输入输出接口。2 特点①与多媒体卡系统规格书版本4.2全兼容。支持三种不同的数据总线模式:1位(默认)、4位和8位。②与较早的多媒体卡系统规格版本全兼容(向前兼容)。③与SD存储卡规格版本2.0全兼容。④与SD I/O卡规格版本2.0全兼容:支持两种不同的数据总线模式:1位(默认)和4

Let the development board fly! 3万+

通过HttpWebRequest在后台对WebService进行调用

目录: 1  后台调用Webservice的业务需求 2  WebService支持的交互协议 3  如何配置WebService支持的协议 4  后台对WebService的调用 4.1 SOAP 1.1 后台调用实例 4.2 SOAP 1.2 后台调用实例   注:本文章的开发环境为VSS2008  .net FrameWork 3.5   本文章设计到使用的代码示例的We

藿香正气片博客 1433

SOI技术解析:绝缘体上硅的结构优势与应用场景

本文深入解析了SOI(绝缘体上硅)技术的核心结构、性能优势与应用场景。SOI通过在硅衬底与器件层之间引入绝缘的埋氧层,实现了优异的电隔离,从而显著降低芯片功耗、提升工作频率并增强抗干扰能力。该技术已广泛应用于5G射频前端、高性能计算、汽车电子及MEMS传感器等关键领域,是推动半导体性能持续提升的重要技术路径。

jj890的博客 402

C#通过Http发送Soap请求

///         /// 发送SOAP请求,并返回响应xml         ///         /// 请求地址         /// SOAP请求信息         /// 返回响应信息         public static string GetSOAPReSource(string url, string datastr)         {

3391

先进封装技术 Part03---重布线层(RDL)的科普

RDL是一种在芯片封装过程中用于重新分布电气连接的技术。它通过在芯片表面或中介层上形成额外的布线层,重新分配芯片的I/O(输入/输出)位置,以适应不同的封装需求和提高电气连接的灵活性。

阿拉伯梳子的专栏 4697

AI与Agent赋能下的软件测试变革:面向未来测试工程师的工作方法论

AI Agent 软件测试 测试 software testing test

测试技师的自我修养 1230

C# 使用Get,Post,Soap方式调用WebService

using System; using System.Web; using System.Xml; using System.Collections; using System.Net; using System.Text; using System.IO; using System.Xml.Serialization; //By huangz 2008-3-19 /// /// 利用We

jjhua的专栏 1万+

张力控制速度闭环控制算法

这个算法的核心思想是通过比较实际速度和期望速度的差异来调整控制信号,以达到稳定的速度控制。比例项用于直接根据误差调整输出,积分项用于积累误差并进行补偿,微分项用于预测误差的变化趋势并进行调整。张力控制是在许多工程和工业应用中非常重要的一个过程,它涉及到通过调节力的大小来实现稳定的工作状态。通过合理设置比例、积分和微分系数,并结合实际系统的特性进行调试和优化,可以实现准确稳定的张力控制。速度闭环控制算法通过比较实际速度和期望速度之间的差异,并根据差异调整系统的输出,以保持速度稳定。

LiJavascript的博客 1301

Asp.Net下采用GET/POST/SOAP方式动态调用WebService

using System;using System.Web;using System.Xml;using System.Collections;using System.Net;using System.Text;using System.IO;using System.Xml.Serialization; /// <summary>/// 利用WebRequest/WebRes...

weixin_33827590的博客 291

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

无返回值,soap方式调用WebService

using System;using System.Web;using System.Xml;using System.Collections;using System.Net;using System.Text;using System.IO;using System.Xml.Serialization; namespace XTask.Common.Net{ /// <summa...

weixin_30469895的博客 177

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

动态webservice调用接口

using System; using System.Collections; using System.IO; using System.Net; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Hishop.Plugins { /// &lt;summar...

weixin_34018202的博客 179

.Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#)

using System;using System.Web;using System.Xml;using System.Collections;using System.Net;using System.Text;using System.IO;using System.Xml.Serialization; /// <summary>/// 利用WebRequest...

weixin_30496751的博客 86

利用WebRequest/WebResponse和XmlDocument调用WebService(含Soap和SoapHeader以及mustUnderstand属性)

using System; using System.Collections; using System.IO; using System.Net; using System.Text; using System.Xml; using System.Xml.Serialization; using System.Web; namespace Calculator {     /// &lt;s...

ss_tt_ll的博客 830

WEBSERVICE GET、POST、SOAP方式调用

C# WEBSERVICE的GET、POST、SOAP调用方式,可以类库 using System; using System.Web; //需在程序集中添加对System.Web的引用 using System.Xml; using System.Collections; using System.Net; using System.Text; using System.IO; using

ccw1101的博客 5426

c# Sosp协议 利用WebRequest/WebResponse调用 WebService

新建类:WebServiceCaller 1 /// <summary> 2 /// 利用WebRequest/WebResponse进行WebService调用的类 3 /// </summary> 4 public static class WebServiceCaller 5 { 6 ...

weixin_34341117的博客 165

.Net 下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox

一直以来,我都为动态调用WebService方法而烦恼。在.Net环境下,最常用的方法就是采用代理类来调用WebService,可以通过改变代理类的Url属性来实现动态调用,但当xmlns改变时就会出错,似乎要重新绑定Webservice并重新编译后才能再次运行。我还试过网上的一种动态编译并动态调用WebService的方式,这种方法效率低,而且需要有较高的权限,否则编译失败。我曾在Sq...

173

c#webservice接口調用_C#动态webservice调用接口

C#动态webservice调用接口using System;using System.Collections;using System.IO;using System.Net;using System.Text;using System.Xml;using System.Xml.Serialization;namespace Hishop.Plugins{/// /// 利用WebRequest...

weixin_36002881的博客 796
上一篇: sql表删除列的default约束有效方法
下一篇: 委托和事件实例
make1828
博客等级 码龄19年 60粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值