本文详细的描述了HttpWebRequest 请求 WebService 和接受WebService的响应过程的代码,网上有很多人说HttpWebRequest 请求网页可以,请求WebService怎么就报服务器无法响应,这主要是因为请求参数没有添加soap协议头(见下面黄色部分)
StreamReader streamreader = null;
HttpWebResponse response = null;
Stream receiveStream = null;
String strerro = "";
private void button1_Click(object sender, EventArgs e)
{
dataGrid1.DataSource = DownLoaddata("1");
}
public DataTable DownLoaddata(string RWDH)
{
String str = "";
//创建一个http请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.0.137:8080/eos-default/DowloadService");
request.Method = "POST";
request.ContentType = " application/soap+xml;charset=utf-8";
StringBuilder bd=new StringBuilder();
bd.Append("<?xml version='1.0'?>\r\n<soap12:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap12='http://www.w3.org/2003/05/soap-envelope' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> \r\n<soap12:Body>\r\n<downLoadData xmlns='http://www.primeton.com/DownLoadServer'>\r\n<dow.in0>");
bd.Append(RWDH);
bd.Append("</dow.in0>\r\n</downLoadData>\r\n</soap12:Body>\r\n</soap12:Envelope>");
byte[] bytes = Encoding.UTF8.GetBytes(bd.ToString());
request.ContentLength = bytes.Length;
Stream requeststream = request.GetRequestStream();
requeststream.Write(bytes, 0, bytes.Length);
requeststream.Close();
try
{
response = (HttpWebResponse)request.GetResponse();
receiveStream = response.GetResponseStream();
streamreader = new StreamReader(receiveStream);
str = streamreader.ReadToEnd();
}
catch
{
if (response!=null)
{
response.Close();
}
if (streamreader!=null)
{
streamreader.Close();
}
strerro = "服务器响应错误!";
return null;
}
finally
{
response.Close();
streamreader.Close();
}
//到这里输出一下str 里面有哪些数据,然后决定具体的拆分方法,封装到DataTable 返回
return table;
}
}
有不了解的地方,加QQ447059990