C#使用HttpPost调用WebMethod接口:参数拼接与XML解析完整示例
在C#开发中,调用传统的SOAP或RESTful WebService是常见需求。本文将通过具体代码示例,展示如何使用HttpWebRequest发送POST请求,拼接Form表单格式的参数,并正确解析返回的XML结果数据,同时包含针对调用失败时的配置排查方法。
服务端WebMethod定义示例
在进行客户端调用前,需确保服务端已发布有效的WebMethod。以下是一个基础的WebService类,包含一个无参方法HelloWorld和一个带两个整数参数的加法方法Sum:
public class WebServiceDemo : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public string Sum(string param1, string param2)
{
int num1 = Convert.ToInt32(param1);
int num2 = Convert.ToInt32(param2);
int sum = num1 + num2;
return sum.ToString();
}
}
第1步:构建POST请求参数
WebService通常要求POST请求的Content-Type为 application/x-www-form-urlencoded。我们需要将参数序列化为 key=value&key=value 的字符串格式。
string url = "http://localhost:12544/WebServiceDemo.asmx";
string method = "Sum";
string num1 = "1";
string num2 = "2";
// 注意:UrlEncode防止特殊字符干扰
string param = HttpUtility.UrlEncode("param1") + "=" + HttpUtility.UrlEncode(num1) + "&" + HttpUtility.UrlEncode("param2") + "=" + HttpUtility.UrlEncode(num2);
byte[] bytes = Encoding.UTF8.GetBytes(param); 第2步:发送HttpWebRequest请求
使用 HttpWebRequest 创建请求对象,设置 Method 为 POST,并将序列化后的字节数组写入 RequestStream。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "/" + method);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;
using (Stream writer = request.GetRequestStream())
{
writer.Write(bytes, 0, bytes.Length);
// writer.Close() 已在 using 中处理
}第3步:读取并解析XML响应
WebService的响应通常是XML格式。为了获取具体的业务数据(即WebMethod返回的字符串内容),可以使用 XmlTextReader 跳过外层信封直接读取内部文本,或者直接使用 StreamReader 读取完整XML字符串。
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string result = string.Empty;
// 方式一:直接读取内部XML字符串(推荐用于获取WebMethod返回值)
using (Stream stream = response.GetResponseStream())
using (XmlTextReader reader = new XmlTextReader(stream))
{
reader.MoveToContent();
result = reader.ReadInnerXml();
}
// 方式二:读取完整XML结构(调试用)
// using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
// {
// result = sr.ReadToEnd();
// }第4步:常见问题排错
如果在调用过程中遇到 404 Not Found 或类似的协议错误,可能是因为IIS默认未启用HttpPost协议。需要在服务端的 web.config 中添加相应的协议支持:
<system.web>
<webServices>
<protocols>
<add name="HttpPost" />
</protocols>
</webServices>
</system.web>
总结
C#通过HttpWebRequest调用WebService的核心在于正确的参数编码(UrlEncode)、POST头部设置以及XML响应的解析。掌握这一流程可以兼容大多数遗留系统或内部API的调用需求。
以上就是C#使用HttpPost调用WebService方法的详细内容,更多关于C#编程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









