航班信息查询测试(WSDL访问网址):
http://ws.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl
/// <summary>
/// 做测试使用 做的一个查询航班信息, 返回的数据比较丰富, 可以处理数据
///
/// 请求主体
/// </summary>
/// <returns></returns>
private string setxmlRequestTest()
{
//Item(Company)航空公司、Item(AirlineCode)航班号、Item(StartDrome)出发机场、Item(ArriveDrome)到达机场、Item(StartTime)出发时间、Item(ArriveTime)到达时间、Item(Mode)机型、Item(AirlineStop)经停、Item(Week)飞行周期(星期)
//getDomesticAirlinesTime
string strXml = "";
strXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine; //换行
strXml = strXml + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:mk=\"http://WebXml.com.cn/\">" + Environment.NewLine;
strXml = strXml + "<soapenv:Header/>" + Environment.NewLine; //不要空格
strXml = strXml + "<soapenv:Body>" + Environment.NewLine
+ "<mk:getDomesticAirlinesTime>" + Environment.NewLine
+ "<mk:startCity>" + "珠海" + "</mk:startCity>" + Environment.NewLine
+ "<mk:lastCity>" + "成都" + "</mk:lastCity>" + Environment.NewLine
+ "<mk:theDate>" + "2020-04-02" + "</mk:theDate>" + Environment.NewLine
+ "</mk:getDomesticAirlinesTime>" + Environment.NewLine;
strXml = strXml + "</soapenv:Body>" + Environment.NewLine;
strXml = strXml + "</soapenv:Envelope>";
return strXml;
}
/// <summary>
/// 航班信息请求测试 :飞机航班信息请求表头设置 及 返回信息处理
/// </summary>
/// <param name="strXml"></param>
private void sendRequst()
{
//webService 航班信息查询测试
string strXml = setxmlRequestTest();
Console.WriteLine(strXml);
//1.请求头设置
//http://ws.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl
//飞机航班时刻测试
string xstr = @"http://ws.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(xstr);
request.ContentType = "text/xml;charset=utf-8";
request.Method = "POST";
//设置这个表头会导致信息错误返回 (没有该方法,主要看错误返回信息如何处理)
// request.Headers.Add("SOAPAction", "http://tempuri.org/LoginAction");
// request.Headers.Add("SOAPMethodName", "urn:myserver/soap:TaxCalculator#GetSalesTax");
//1.1 将SOAP的内容处理发送
byte[] bytes = Encoding.UTF8.GetBytes(strXml);
Stream writer = request.GetRequestStream();
writer.Write(bytes, 0, bytes.Length);
writer.Flush();
writer.Close();
// 2.接收返回的数据
string result = "";
string err = "PlanReplyErr:"+Environment.NewLine;
try
{
HttpWebResponse hwRes = request.GetResponse() as HttpWebResponse;
if (hwRes.StatusCode == HttpStatusCode.OK)
{//返回成功
Stream rStream = hwRes.GetResponseStream();
//流读取
StreamReader sr = new StreamReader(rStream, Encoding.UTF8);
result = sr.ReadToEnd();
sr.Close();
rStream.Close();
Console.WriteLine("返回结果测试0:" + result);
}
else
{
result = "连接错误";
Console.WriteLine("返回结果测试1:" + result);
}
//关闭
hwRes.Close();
}
catch (System.Net.WebException ex)
{
String responseFromServer = ex.Message.ToString() + " "+Environment.NewLine;
Console.WriteLine("返回结果测试2.0:" + responseFromServer);
String responseFromServer2 = "";
if (ex.Response != null)
{
using (WebResponse response = ex.Response)
{
Stream data = response.GetResponseStream();
using (StreamReader reader = new StreamReader(data))
{
responseFromServer2 += reader.ReadToEnd();
}
}
}
result = responseFromServer2;
err += responseFromServer + responseFromServer2 + Environment.NewLine + Environment.NewLine;
Console.WriteLine("返回结果测试2:" + result);
}
//把数据输出到一个路径处理(本地调试可以这样做,App的安装路径下)
string rootpath = Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("\\"));
string rootpath1 = rootpath.Substring(0, rootpath.LastIndexOf("\\")) + "\\txtTest";
if (!Directory.Exists(@rootpath1))
{
Directory.CreateDirectory(@rootpath1);//不存在就创建文件夹
}
string rootpath00 = rootpath.Substring(0, rootpath.LastIndexOf("\\")) + "\\txtTest\\DomesticAirline_test.xml";
//Console.WriteLine(rootpath);
//保存到目录下
File.WriteAllText(@rootpath00, result);
test4(rootpath00);
}
/// <summary>
/// 航班信息测试: 对返回数据的解析处理
/// </summary>
/// <param name="path"></param>
private void test4(string path)
{
try
{
if (File.Exists(path))
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
Console.WriteLine("执行情况");
// XmlNodeList topM = doc.DocumentElement.ChildNodes; //获取根节点的所有子节点
XmlElement xmlElem = doc.DocumentElement;//获取根节点
XmlNodeList faultNode = xmlElem.GetElementsByTagName("faultstring");//取节点名bodyXmlNode
if (faultNode.Count > 0)
{
MessageBox.Show("读取异常 " + faultNode[0].InnerText, "提示");
}
else
{
//AirlinesTime //Airlines
XmlNodeList elemList = doc.GetElementsByTagName("AirlinesTime"); //用这个取到 每个个体的数据
for (int i = 0; i < elemList.Count; i++)
{
string key = elemList[i].Name;
Console.WriteLine(i + "序号:" + "Airlines子节点名字: " + key);
string key2 = elemList[i]["Company"].InnerText; //就是这个方法取值
Console.WriteLine("key2: " + key2);
string key24 = elemList[i]["AirlineCode"].InnerText; //就是这个方法取值
string key25 = elemList[i]["StartDrome"].InnerText; //就是这个方法取值
string key26 = elemList[i]["ArriveDrome"].InnerText; //就是这个方法取值
string key27 = elemList[i]["StartTime"].InnerText; //就是这个方法取值
string key28 = elemList[i]["ArriveTime"].InnerText;
Console.WriteLine("Company: " + key2);
Console.WriteLine("AirlineCode: " + key24);
Console.WriteLine("StartDrome: " + key25);
Console.WriteLine("ArriveDrome: " + key26);
Console.WriteLine("StartTime: " + key27);
Console.WriteLine("ArriveTime: " + key28);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
打印查看发送信息:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mk="http://WebXml.com.cn/">
<soapenv:Header/>
<soapenv:Body>
<mk:getDomesticAirlinesTime>
<mk:startCity>珠海</mk:startCity>
<mk:lastCity>成都</mk:lastCity>
<mk:theDate>2020-04-02</mk:theDate>
</mk:getDomesticAirlinesTime>
</soapenv:Body>
</soapenv:Envelope>
打印查看返回错误信息(request.Headers设置部分调试结果):
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>服务器未能识别 HTTP 头 SOAPAction 的值: http://tempuri.org/LoginAction。</faultstring>
<detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>
打印正常返回的信息:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<getDomesticAirlinesTimeResponse xmlns="http://WebXml.com.cn/">
...............
<getDomesticAirlinesTimeResult>
............
<AirlinesTime diffgr:id="AirlinesTime1" msdata:rowOrder="0"><Company>南方航空</Company><AirlineCode>CZ3767</AirlineCode><StartDrome>珠海金湾机场</StartDrome><ArriveDrome>成都双流国际机场</ArriveDrome><StartTime>08:40</StartTime><ArriveTime>12:20</ArriveTime><Mode>738</Mode><AirlineStop>0</AirlineStop><Week>123456日</Week>
</AirlinesTime>
..............................
</getDomesticAirlinesTimeResult>
</getDomesticAirlinesTimeResponse>
</soap:Body>
</soap:Envelope>
解析结果:
0序号:Airlines子节点名字: AirlinesTime
key2: 南方航空
Company: 南方航空
AirlineCode: CZ3767
StartDrome: 珠海金湾机场
ArriveDrome: 成都双流国际机场
StartTime: 08:40
ArriveTime: 12:20