Web service入门6:根据WSDL文档用C#写web请求服务

8 篇文章 0 订阅
5 篇文章 0 订阅

航班信息查询测试(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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值