C# 动态调用WebService接口教程
版权申诉
61 浏览量
更新于2024-09-12
收藏 77KB PDF 举报
"C#动态调用WebService接口的实现代码示例"
在C#编程中,动态调用WebService接口是常见的任务,特别是在需要与不同系统交互或者需要灵活处理多种服务调用时。本示例提供了一个名为`WebServiceCaller`的类,该类使用`System.Net.WebRequest`和`System.Net.WebResponse`来实现对WebService的动态调用。
首先,为了调用WebService,我们需要确保目标服务支持HTTP GET和POST方法。在Web.config文件中,可以添加以下配置来启用这些协议:
```xml
<webServices>
<protocols>
<add name="HttpGet" />
<add name="HttpPost" />
</protocols>
</webServices>
```
`WebServiceCaller`类的核心方法是`QueryPostWebService`,它接受三个参数:服务的URL、要调用的方法名以及一个包含参数的Hashtable。这个方法通过创建`HttpWebRequest`对象并设置其属性来构造请求,然后发送POST数据到服务。
```csharp
public static XmlDocument QueryPostWebService(string URL, string MethodName, Hashtable Pars)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL + "/" + MethodName);
request.Method = "POST";
request.ContentType = "application/soap+xml; charset=utf-8";
// 将参数转换为SOAP Envelope格式
StringBuilder sb = new StringBuilder();
sb.Append("<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/'>");
sb.Append("<soap:Body>");
foreach (DictionaryEntry entry in Pars)
{
sb.AppendFormat("<{0}>{1}</{0}>", entry.Key, entry.Value);
}
sb.Append("</soap:Body>");
sb.Append("</soap:Envelope>");
byte[] byteArray = Encoding.UTF8.GetBytes(sb.ToString());
request.ContentLength = byteArray.Length;
// 写入请求体
using (Stream dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
// 获取并处理响应
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
throw new ApplicationException("服务器返回错误状态码:" + response.StatusCode);
using (Stream responseStream = response.GetResponseStream())
{
if (responseStream == null)
throw new ApplicationException("无法获取服务器响应流");
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(responseStream);
return xmlDoc;
}
}
}
```
这个方法首先构建了SOAP Envelope格式的XML字符串,将参数以键值对的形式插入到Body中。然后,将这个XML字符串写入到请求的Body中,并发送请求。当收到响应时,会检查状态码是否为200(OK),如果不是,则抛出异常。如果一切正常,它会读取响应流并将其加载到一个`XmlDocument`对象中,供后续处理使用。
此外,对于支持GET方法的服务,可以通过修改请求方式和请求内容来实现GET调用。GET请求通常将参数附加到URL中,而不是放在请求体里。
总结来说,这个C#示例提供了一种动态调用WebService接口的方式,适用于各种基于SOAP的服务。通过自定义参数集合和方法名,开发者可以轻松地与不同的WebService接口进行交互,增强了代码的灵活性和可复用性。
2012-07-24 上传
2020-08-28 上传
2023-08-25 上传
2023-07-28 上传
2023-10-09 上传
2023-07-15 上传
2023-05-25 上传
2023-07-28 上传
weixin_38657139
- 粉丝: 9
- 资源: 955
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程