客户端通过WebService实现和服务端书交互

xiaoxiao2021-02-28  128

WebService介绍

        WebService作为一种服务,它不需要客户端提供额外的软件支持,只要客户端支持HTTP协议和XML这样两个特性就可以了。对WebService自身来讲,它本身就是一种自我描述型的设计,所以服务端和客户端可以通过它来响应和处理请求的内容及格式。

         XML是一种平台无关、语言无关的文档结构,因此WebService是一种可以跨平台的Web APIWebService能够让客户端像调用本地代码一样调用服务端代码,所以WebService是一种分布式计算的Web应用程序组件。我们对WebService下了如此多的定义,其实核心是什么呢?核心是WebService是一种基于HTTP协议和XMLWeb API。在C/S结构中,我们经常用到.NET框架提供asmx封装的接口调用,通过WebService实现服务端数据的交互。

客户端WebService调用

下述为通过asmx方式利用C#语言实现的客户端webservice请求:

    /*   客户端要求返回JSON格式的数据  */

  Public void JSON_GetService(objectsender, EventArgs e)

   {

       try

        {

               HttpWebRequestrequest = (HttpWebRequest)WebRequest.Create(""http://IP/webservice/Test/service.asmx/GetData",");

               //要求参数为标准的名称值对

               string strPostdata = "sysFlag=1&AU=2&lastReadTime=&orgID=";

               request.ContentType = "application/x-www-form-urlencoded;charset=utf-8";

               //  如果要求参数为json格式,请屏蔽上述配置开启下述配置

               //   string strPostdata ="{sysFlag:1,AU:2,lastReadTime:'',orgID:''}";

               //   request.ContentType ="application/json";//如果参数格式为json

               //接受数据的格式:两种方式xml或者json

               //   request.Accept ="application/xml";

                    request.Accept = "application/json";

               //函数参数传递以post格式传递(必须)

               request.Method = "POST";

               //将参数传递到被调用方

               byte[] buffer = Encoding.Default.GetBytes(strPostdata);

               request.ContentLength = buffer.Length;

               request.GetRequestStream().Write(buffer, 0, buffer.Length);

 

               //等待返回值并进行处理

               string responseStr = string.Empty;

                /*   处理服务器端返回数据,服务端返回DataSet的序列化数据 */

               using (HttpWebResponse response =request.GetResponse() as HttpWebResponse)

               {

                   System.IO.Stream respStream =response.GetResponseStream();

                   System.IO.StreamReader reader = new System.IO.StreamReader(respStream,Encoding.UTF8);

                   responseStr = reader.ReadToEnd();

               }

               if (request.Accept == "application/json")

               {

                   DataSet ds = JsonConvert.DeserializeObject(responseStr, typeof(DataSet)) asDataSet;

               }

               else if(request.Accept == "application/xml")

                {

                   StringReader sr1 = new StringReader(responseStr);

                   XmlSerializer xmldes = newXmlSerializer(typeof(DataSet));

                   DataSet ds = xmldes.Deserialize(sr1) asDataSet;

               }

            }

            catch (WebException ex)

            {

               var rsp = ex.Response as HttpWebResponse;

               StreamReader sr = new StreamReader(rsp.GetResponseStream(),Encoding.UTF8);

               string strHtml = sr.ReadToEnd();

               int httpStatusCode = (int)rsp.StatusCode;

            }

        }

服务端返回

[     WebMethod(EnableSession = true, Description = "WebService测试")]

        publicvoid GetData (string sysFlag, string AU, string lastReadTime, stringorgID)

        {

           string serializeValue = string.Empty;

            // 获取DataSet数据

           DataProcess dp = new DataProcess();

           DataSet ds = dp.GetDatsSet (sysFlag, AU, lastReadTime, orgID);

            // 序列化处理

           string[] requestType = HttpContext.Current.Request.AcceptTypes;

           IList TypeList = requestType as IList;

            if(TypeList != null)

            {

               if (TypeList.Contains("application/xml") ||TypeList.Contains("text/xml"))

               {

                   //XML序列化

                   serializeValue = XMLSerializerData(ds);

               }

               else if (TypeList.Contains("application/json") ||TypeList.Contains("text/javascript"))

               {

                   // json序列化

                   serializeValue = JsonConvert.SerializeObject(ds);

               }

            }

           else

            {

               // json 序列化

               serializeValue = JsonConvert.SerializeObject(ds);

            }

            //通过Response方式返回,避免return方式时JSON时{"d":"实际值"}格式的出现

           Context.Response.ContentEncoding = System.Text.Encoding.UTF8;

           Context.Response.Write(serializeValue);

            Context.Response.Flush();

           Context.Response.End();

           Context.Response.Close();

        }

转载请注明原文地址: https://www.6miu.com/read-49729.html

最新回复(0)