XMLHTTP开发Web 客户端

80酷酷网    80kuku.com

  web|xml|客户端

  关键字:XMLHTTP,XML,Web客户端,C#,ASP

  所有的知识都不是最新的知识点,关键是达到自己的设计目的。

  某些时候,我们可能需要客户端做点什么以简化复杂的脚本处理,比如加密之类的等。

  不管用什么样的客户端,首先我们应该确定我们遵守的协议,或者说如何设置或获取我的数据。这里,我们的服务器端为IIS5的ASP程序,所以我们首先遵守的是HTTP协议,然后在HTTP协议上传输XML。用XML是因为更容易统一我们的数据格式,有XML这种思想我们为什么不用呢。

  恰好XMLHTTP,就是基于HTTP传输XML的很方便的类。

  首先简要说一下XMLHTTP的两个函数:

  open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)

  按照bstrMethod指定的HTTP方法(如POST,GET等)打开bstrUrl指定的连接,其中varAsync为是否异步,bstrUser, bstrPassword为访问bstrUrl时需要用户及密码。

  send(varBody)

  发送的数据,或者应该说是提交的数据。

   具体可以查看相关的MSXML SDK。

   以下利用C#实现XML的传输,假定反馈的XML格式为"<RESPONSE><ERROR ID=\"0\">成功</ERROR></RESPONSE>"

private MSXML2.DOMDocument40Class zXml;   // 处理服务器反馈结果
private int zLastErrorCode;

private string zLastErrorDescription;

private const int OkSuccess=0;

//以Err打头的都是一些常量

private int ExecuteCmd(string sCmd, string method, string ext)

{

    //根据sCmd计算出sURL的代码省略。

  //……

 try
      {
        //MessageBox.Show(sURL);
        zXmlHttp.open(method, sURL, false,"","");
        zXmlHttp.send(ext);
      }
      finally
      {
        // 检测设置最后的错误代码和描述

        // 检查zXmlHttp的状态
        if(zXmlHttp.status / 100 ==2)   //200, 201, 202, 203, 204, 205, 206
        {
          // 成功
          //MessageBox.Show(zXmlHttp.responseText);
          zXml.loadXML(zXmlHttp.responseText);
         
          if(zXml.parseError.errorCode!=0)
          {
            zLastErrorCode = ErrProtocol;
            //zLastErrorDescription = "解析服务器反馈结果时出现错误,协议版本可能不正确";
            zLastErrorDescription = zXml.parseError.reason;   //本行应该仅作调试时使用,发布时应该使用上一行
            // MessageBox.Show(zXmlHttp.responseText);
          }
          else
          {
            s = GetXmlNodeValue(zXml,"");

            if(s.Length==0)
            {
              zLastErrorCode = OkSuccess;
            }
            else
            {
              try
              {
                zLastErrorCode = Convert.ToInt32(s);
              }
              catch
              {
                zLastErrorCode = ErrUnknown;
              }
            }

            zLastErrorDescription = GetXmlNodeValue(zXml, "/RESPONSE/ERROR");
            if(zLastErrorDescription.Length==0)
            {
              if(zLastErrorCode==OkSuccess)
              {
                zLastErrorDescription = "执行成功";
              }
              else
              {
                zLastErrorDescription = "未知错误信息";
              }
            }
          }
        }
        else
        {
          // 服务器出错
          zLastErrorCode = ErrService;
          zLastErrorDescription = zXmlHttp.statusText;
        }
      }

  return zLastErrorCode;
}

  然后是服务器端的Test.asp

<% LANGUAGE=VBSCRIPT %>

<%

Dim oXml

Set oXml = Server.CreateObject("Msxml2.DOMDocument.4.0")
oXml.async = False
oXml.resolveExternals = False

 oXml.load Request

'然后对提交的XML数据进行处理

Set oXml = Nothing

'最后是反馈处理结果
Response.ContentType = "text/xml"   '由于反馈的是XML不可缺!!
Response.CharSet= "gb2312"   '反馈的内容的编码,不可缺!!否则会出现非法字符不能被客户端解析Response.Write "<?xml version=""1.0"" encoding=""gb2312"" ?>" & vbCrlf
Response.Write "<RESPONSE><VERSION>1.0.0.0</VERSION><TEST>中国人民万岁</TEST></RESPONSE>" & vbCrlf
%>

  最后要说的是传输的XML数据格式,可以说就是你自己定义的协议了,以上只不过是抛砖引玉而已。努力,一切在你自己。" & vbCrlfResponse.Write "1.0.0.0中国人民万岁" & vbCrlf-->" & vbCrlfResponse.Write "1.0.0.0中国人民万岁" & vbCrlf-->" & vbCrlfResponse.Write "1.0.0.0中国人民万岁" & vbCrlf-->" & vbCrlfResponse.Write "1.0.0.0中国人民万岁" & vbCrlf-->



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: