所有的知識都不是最新的知識點,關鍵是達到自己的設計目的。
某些時候,我們可能需要客戶端做點什麼以簡化復雜的腳本處理,比如加密之類的等。
不管用什麼樣的客戶端,首先我們應該確定我們遵守的協議,或者說如何設置或獲取我的數據。這裡,我們的服務器端為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,"/RESPONSE/ERROR/@ID");
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 "