在实际开发中遇到一些读取远程XML文件,以下是总结的方法
1,以前用的笨方法
用HTTP_GET 方法读取远程XML数据,保存在本地,然后用XmlDocument加载,这种方法比较笨,让大家见笑了
2,也不是很好, 先读取HTTP_GET 方法读取远程XML数据 用StringReader 加载文件,最后用XmlTextReader 读取数据
StringBuilder str = new StringBuilder(256);
str.Append(Comment.doGetRequest("http://localhost:6350/alidz.do?cmd=querypricebypnr&pnr=X4H4B&bigpnr=0&air=ca&fmt=xml"));
StringReader strReader = new
StringReader(str.ToString());
  ......
function getkeyvalue(s_keyname,s_keystr)
s_keybegin="<"+s_keyname+">"
s_keyend="</"+s_keyname+">"
s_i_begin=instr(s_keystr,s_keybegin)
s_i_end=instr(s_keystr,s_keyend)
if s_i_end<=s_i_begin+len(s_keybegin) then
getkeyvalue=""
exit function
else
getkeyvalue=mid(s_keystr,s_i_begin+len(s_keybegin),s_i_end-s_i_begin-len(s_keybegin))
exit function
end if
end function
function setkeyvalue(s_keyname,s_keystr,s_keyvalue)
if isnull(s_keyvalue) then
setkeyvalue=s_keystr
exit function
end if
s_keybegin="<"+s_keyname+">"
s_keyend="</"+s_keyname+">"
s_i_begin=instr(s_keystr,s_keybegin)
s_i_end=instr(s_keystr,s_keyend)
if s_i_end<=s_i_begin+len(s_keybegin) then
setkeyvalue=s_keystr+s_keybegin+s_keyvalue+s_keyend
exit function
else
setkeyvalue=mid(s_keystr,1,s_i_begin-1)+s_keybegin+s_keyvalue+s_keyend+mid(s_keystr,s_i_end+len(s_keyend))
exit function
end if
end function ......
<%
Response.Buffer = true
Response.Clear
dim url
Dim fso,fl,flsize
dim Dname
Dim objStream,ContentType,flName,isre,url1
Dim strFileName
strFileName=replace(replace(Request("file"),"\",""),"/","") '传参
strFileName="/files/"&strFileName ' 改成你你文件的存放路径
If strFileName<>"" Then
'******************************下载文件存放的服务端目录
url=Server.MapPath(strFileName)
else
Response.Write("no found")
Response.end
End If
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Set fl=fso.getfile(url)
flsize=fl.size
flName=fl.name
Set fl=Nothing
Set fso=Nothing
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadfromFile url
Select Case lcase(Right(flName, 4))
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
......
Sub CreateAccessDB(DBToCreate)
Dim catNewDB ' As ADOX.Catalog
Set catNewDB = Server.CreateObject("ADOX.Catalog")
catNewDB.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & server.mappath(DBToCreate) & _
";Jet OLEDB:Engine Type=5;"
' Engine Type=5 = Access 2000 Database
' Engine Type=4 = Access 97 Database
Set catNewDB = Nothing
End Sub ......
近来,随着Mono2.4和Jexus web server 2.3的成功发布,在Linux 平台架设Asp.net的时机已经完全成熟。由于Linux服务器系统所具备的大量的优点,可以预计,跨平台的Linux ASP.NET网站必将进入我们的工作与生产实际。
名词解释:
一、Mono:
Mono是一个开源项目,是按ECMA-335定义的标准执行.NET框架,简单地说,Mono就是大家梦寐以求的.NET跨平台框架。Mono现在已经支持Linux、Mac OS X、Solaris和Windows平台。就版本而言,Mono2.4版与微软.net框架3.5版相当。
下载地址:www.go-mono.com
二、Jexus web server for linux
Jexus是一款跨平台的WEB服务器力作,属于免费软件,支持windows、linux、unix等多种平台。由于Jexus本身的DotNET特性,因此Jexus对ASP.NET有一种天然的亲和力,是Linux/Unix等非Windows平台架设ASP.NET WEB服务器的首选方案。同时,由于Jexus拥有IIS所不具有的Urlwrite等特殊功能以及防止非法请求(如SQL注入)等入侵检测机制,因此,Jexus也是Windows平台搭建ASP.NET WEB服务器的极为重要选择。
Jexus下载地址:linux.j66.net ......
最近开发Ext应用,使用ajax请求数据时,遇到了请求数据以返回,但IE里却无法显示的怪问题。
使用HTTPWatch查看,发现ERROR_INTERNET_CONNECTION_RESET。
使用FireFox和google浏览器都没有问题,网上查找说网站放在IIS上没有问题,试验后证明有效。
但同事开发用机大部分都是XP系统,有部分还是HOME版,因此该问题必须找到原因解决才行。发现POST请求改为GET请求也不会出这个问题。
再进一步的大胆假设,小心求证。
在ProcessRequest最后增加
context.Request.InputStream.ReadByte();
后问题彻底解决
这证明了我之前的假设
情况可能是由于使用文件方式系统的网站,调试运行时使用的是ASP.NET Development Server而非IIS,因此运行机制上与IIS存在不同。
检查代码发现,处理该请求时,只获取了URL上的部分内容,并未对POST内容部分进行获取。
此时可能ASP.NET Development Server并未从IE链接过来的Socket中读取剩余部分,而程序处理完成后服务器端发送结果完成后该Socket链接断掉,而IE认为数据还没有发送完因此报了ERROR_INTERNET_CONNECTION_RESET错误。 ......
最近开发Ext应用,使用ajax请求数据时,遇到了请求数据以返回,但IE里却无法显示的怪问题。
使用HTTPWatch查看,发现ERROR_INTERNET_CONNECTION_RESET。
使用FireFox和google浏览器都没有问题,网上查找说网站放在IIS上没有问题,试验后证明有效。
但同事开发用机大部分都是XP系统,有部分还是HOME版,因此该问题必须找到原因解决才行。发现POST请求改为GET请求也不会出这个问题。
再进一步的大胆假设,小心求证。
在ProcessRequest最后增加
context.Request.InputStream.ReadByte();
后问题彻底解决
这证明了我之前的假设
情况可能是由于使用文件方式系统的网站,调试运行时使用的是ASP.NET Development Server而非IIS,因此运行机制上与IIS存在不同。
检查代码发现,处理该请求时,只获取了URL上的部分内容,并未对POST内容部分进行获取。
此时可能ASP.NET Development Server并未从IE链接过来的Socket中读取剩余部分,而程序处理完成后服务器端发送结果完成后该Socket链接断掉,而IE认为数据还没有发送完因此报了ERROR_INTERNET_CONNECTION_RESET错误。 ......