C#动态调用WebService接口无需添加引用
"本文档主要介绍了如何在C#中动态调用Web服务接口,避免了添加Web引用的步骤,使得在上线时只需要更改WSDL地址即可。提供的代码示例展示了使用WebRequest/WebResponse类进行SOAP Web服务调用的方法。" 在C#开发中,有时我们需要调用远程Web服务接口来实现特定功能。传统的做法是通过添加Web引用或服务引用,将Web服务的代理类自动生成到项目中。然而,这种做法在某些情况下可能不够灵活,例如当Web服务地址频繁变化或者我们希望保持代码的简洁性时。动态调用Web服务接口可以解决这些问题。 动态调用Web服务接口,主要是通过HttpWebRequest和HttpWebResponse类来实现的。这些类位于System.Net命名空间下,提供了对HTTP协议的基本操作支持。下面是一个名为WebServiceCaller的C#类,用于动态调用Web服务接口: ```csharp using System; using System.Collections; using System.IO; using System.Net; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Hishop.Plugins { public class WebServiceCaller { // 使用说明:Web服务应支持HttpGet和HttpPost调用,并在web.config中配置相关协议 // 示例调用方法: // Hashtable ht = new Hashtable(); // 存储Web服务所需参数 // ht.Add("str", "test"); // ht.Add("b", "true"); // XmlDocument xx = WebSvcCaller.QuerySoapWebService("http://localhost:81/service.asmx", "HelloWorld", ht); // MessageBox.Show(xx.OuterXml); // 针对需要HttpPost调用的Web服务方法 public static XmlDocument QueryPostWebService(string URL, string MethodName, Hashtable Pars) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName); // 设置请求方法为POST request.Method = "POST"; // 其他配置,如Content-Type等 request.ContentType = "text/xml;charset=UTF-8"; // 将参数转换为XML格式并写入请求体 StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); XmlSerializer xs = new XmlSerializer(Pars.GetType()); xs.Serialize(sw, Pars); byte[] byteArray = Encoding.UTF8.GetBytes(sb.ToString()); using (Stream dataStream = request.GetRequestStream()) { dataStream.Write(byteArray, 0, byteArray.Length); } // 获取响应 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode == HttpStatusCode.OK) { // 读取响应内容 using (Stream responseStream = response.GetResponseStream()) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(responseStream); return xmlDoc; } } else { throw new ApplicationException("调用Web服务失败,状态码:" + response.StatusCode); } } } } ``` 在这个类中,`QueryPostWebService`方法接收Web服务的URL、方法名以及一个包含参数的Hashtable。它首先创建一个HttpWebRequest对象,设置请求方法为POST,并配置Content-Type为XML。然后,将参数转换为XML格式并写入请求体。最后,发送请求并处理响应,返回Web服务返回的XML文档。 这种方法的优点在于,不需要在项目中生成Web服务代理类,因此在上线时,只需要修改URL中的WSSDL地址即可适应新的服务位置,提高了灵活性。但需要注意的是,这种方法适用于SOAP类型的Web服务,如果Web服务使用其他协议(如RESTful),则需要调整请求和响应的处理方式。
- 粉丝: 5
- 资源: 858
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 利用迪杰斯特拉算法的全国交通咨询系统设计与实现
- 全国交通咨询系统C++实现源码解析
- DFT与FFT应用:信号频谱分析实验
- MATLAB图论算法实现:最小费用最大流
- MATLAB常用命令完全指南
- 共创智慧灯杆数据运营公司——抢占5G市场
- 中山农情统计分析系统项目实施与管理策略
- XX省中小学智慧校园建设实施方案
- 中山农情统计分析系统项目实施方案
- MATLAB函数详解:从Text到Size的实用指南
- 考虑速度与加速度限制的工业机器人轨迹规划与实时补偿算法
- Matlab进行统计回归分析:从单因素到双因素方差分析
- 智慧灯杆数据运营公司策划书:抢占5G市场,打造智慧城市新载体
- Photoshop基础与色彩知识:信息时代的PS认证考试全攻略
- Photoshop技能测试:核心概念与操作
- Photoshop试题与答案详解