使用httppost 实现高效的数据交互接口

在一些小的数据量交互过程中,我们可以使用轻量级的webservice来实现数据交互接口.但是在数据量较大,且访问频率较高的情况下.webservice的效率肯定是不能满足要求的.

webservice是基于http协议,交互过程中使用xml格式传输数据.每交互一次,传输的数据中包含元数据和用户数据;元数据是为了遵守webservice的交互契约,而剥离元数据,剩下的

便是我们用户传输的数据;正式如此,webservice的弊端也就显露出来了,第一,占用带宽比较多;第二每次传输数据时都会将元数据传输,而大多情况下,元数据的大小已经超过了

我们用户数据的大小;当然webservice有有其优点:使用方便,开发快捷,部署简单;

正是因为上边的这些因素,有时候我们可能要基于http协议来设计自己的接口,下边是一个简单的例子,当然,接口交互的契约要双方进行约定,共遵守;

1,先新建一个网站,然后新建一个asp.net web页面,页面的所有html代码我们都将删除. 如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="good.aspx.cs" Inherits="good" %>

2,我们开始在该页面的cs代码文件中写一个处理方法,用来接收httppost的文件流; 如下

 protected void Page_Load(object sender, EventArgs e)
    {
        ExecuteServer();
    }

    private void ExecuteServer()
    {
             StreamReader sr = new StreamReader(Request.InputStream);
            string strInput = sr.ReadToEnd();
            sr.Close();
            if (strInput.Contains("1001"))
            {
                Logger.LogInfo(String.Format("请求:{0}", strInput), "APITEST");
            }
            else
            {
                Logger.LogInfo(String.Format("请求:{0}", strInput));
            }

        this.Response.Write(strInput); //这里我们将收到的请求直接返回,不作处理,仅仅做事例而已

   }

 

3,新建一个程序,web网站或者winform程序都可以,写一个发送请求的方法,如下:

第一个参数:要发送的字符串内容,第二个参数:发送的url地址(如:http://localhost:8090/good.aspx)

 public string PostRequest(string xmlRequest,string postUrl)
        {
            string xml = xmlRequest;
            Encoding encoding = Encoding.GetEncoding("utf-8");
            WebRequest request = WebRequest.Create(postUrl);
            request.Method = "POST";
            byte[] postdata = encoding.GetBytes(xmlRequest);
            request.ContentLength = postdata.Length;
            Stream requesstream = request.GetRequestStream();
            requesstream.Write(postdata, 0, postdata.Length);
            requesstream.Close();
            WebResponse response = request.GetResponse();
            StreamReader responsestream = new StreamReader(response.GetResponseStream());
            string html = responsestream.ReadToEnd();
            requesstream.Close();
            response.Close();
            return html;
        }

 

我们可以在winform程序中调用 string response= PostRequest("test",http://localhost:8090/good.aspx);

接口会将处理结果返回,存储在response变量中;这种实现接口的方式可以有用户自定义;交互过程中也没有元数据,效率也会比webservice高,占用的带宽也会较少,除了底层的网络通讯协议和http协议之外,

没有其他的元数据,接口的发布方法和普通网站的部署方式一样.

 

 

你可能感兴趣的:(.NET)