2010年2月5日 星期五

[Asp].IIS7 上傳檔案大小限制

上傳檔案時遇到 執行錯誤: 'ASP 0101 : 80004005'
原因: 上傳的內容大小超過限制,預設是200K.


Windows 2003 (IIS 6.0) 解決辦法:
1.停止 IIS 服務,
2. 打開 C:\Windows\System32\Inetsrv 中的 metabase.XML, 並修改 AspMaxRequestEntityAllowed 為你需要的值(例如 1073741824, 1GB)。
如果還是不行的話, 修改看看 AspBufferingLimit 裡的值.
3. 啟動IIS服務。


Windows 2008 (IIS 7.0) 解決辦法:
1. 在iis 裡點選要修改的站台.




2. 修改 [Asp] -> [限制內容] -> [要求實體的上限], 改好後並按下 "套用".

附註:其實 200k 就夠用了說, 如果是分次從 user 的 client 端瀏覽器一次讀取200k 的做的話, 例如程式碼:

        dim myTotalBytes
        dim myReadBuffer
        dim myReadLimit
        myReadBuffer = 200000     '// 200KB
        myTotalBytes = Request.TotalBytes
        if myTotalBytes > 0 then
            do
                if myTotalBytes <= myReadBuffer then
                    '// read one time.
                    BinaryStream.write Request.BinaryRead(myTotalBytes)
                    myTotalBytes = 0
                else
                    '// read many time.
                    BinaryStream.write Request.BinaryRead(myReadBuffer)
                    myTotalBytes = myTotalBytes - myReadBuffer
                end if
                if myTotalBytes < 1 then
                    exit do
                end if
            loop
        end if



2010年2月3日 星期三

[Asp].建議避免用 Response.AddHeader 同時設定 contentType 及 charset.

測試主機 OS: Windows Server 2008 standard 版 service pack 1
測試主機 Web Server: Microsoft-IIS/7.0


(會有問題的) Asp Code:
Response.AddHeader "Content-Type", "text/xml; charset=utf-8"

(會有問題的) 執行結果:
Content-Type: text/xml; charset=utf-8,text/xml; Charset=utf-8

造成有問題的畫 面:



(建議的) Asp Code:
Response.CacheControl = "cache"
Response.AddHeader "Pragma", "cache"
Response.charset = "UTF-8"
response.contentType = "text/xml"

(建議的) 執行結果:
Content-Type: text/xml; Charset=UTF-8


2010年1月20日 星期三

[Asp].匯入欄位長度>255 的 excel 檔.

目的:
解決1: 有混合資料(文字&數字) 欄位時, asp 讀取該列時, 會讀出 NULL.
解決2: 匯入欄位長度可以 >255 個位元.

解決辦法:
1.修改 connection 的 connection string,
'// 舊的連線字串
'myExcelConnectionString = "DBQ=" & strExcelFileName & ";DRIVER={Microsoft Excel Driver (*.xls)};"
'// 新的連線字串
myExcelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strExcelFileName & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
請參考附件的 import_act.asp

2. 修改 web server 上的 register.

1. 在 IIS server 的主機上, 點 "開始" -> "執行", 指令輸入框裡輸入 Regedit , 並按下 Enter.

2. 開啟下面這個項目,
Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Engines/Excel/ImportMixedTypes
修改內容為 Text
3. 開啟下面這個項目,
Hkey_Local_Machine/Software/Microsoft/Jet/4.0/Engines/Excel/TypeGuessRows
修改內容為 0

或直接執行附件 ExcelLargeDataSetting.reg

參考資料:


附註: 要被Asp 處理的 excel 的 sheet 要修改 sheet 名稱為 import.

2010年1月19日 星期二

[Bat].重新啟動 IIS 和 Database 用的批次檔

程式目的: 重新啟動 IIS 和 Database, 用來釋放被占用的系統記憶體.

建議用的檔名: restartIISandDB.bat

@echo off
net stop iisadmin /y
net start w3svc
net stop mssqlserver /y
net start mssqlserver
net start sqlserveragent
exit
附註: 可以設排程, 定時來啟動該批次檔.

2010年1月15日 星期五

程式目的:
showHideLayers 調整, 由原本的 visibility 改成 display.


使用方法:
直接取代舊的副程式即可.


source code 如下:
javascript 下載

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}


function MM_showHideLayers() { //v6.0
var i,p,v,obj,args=MM_showHideLayers.arguments;
for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
if (obj.style) { obj=obj.style; v=(v=='show')?'block':(v=='hide')?'none':v; }
if (v!='bool') {
obj.display=v;
}
else if (obj.display=='block') {
obj.display='none';
}
else if (obj.display=='none' || obj.display=='') {
obj.display='block';
}
}

2010年1月14日 星期四

[Asp].陣列加強版 2010.01.14

程式目的:
加強陣列的功能.

使用範例:
<!--#include Virtual = "/inc/max.Array.Object.asp" -->
<%
dim a2
Set a2 = New maxArrayObject


'// 把字串轉成陣列
a2.fromString("3,1")
'// or 用下面這行指令:
' a2.item = array("3","1")

'// sort asc
' a2.sort()
' response.write a2.toString()



'// sort desc
' a2.fromString("1,3")
' a2.sortDesc()
' response.write a2.toString()

'// check item exist (附註: 數字3 及 字串 "3" 是不相等的)
' response.write "<br/>isExist:" & a2.isExist("3")
' response.write "<br/>isExist:" & a2.isExist(3)
' response.write "<br/>isExist:" & a2.isExist("9")

'// find item. (附註: find 會傳回一個 index)
' response.write "<br/>find 1:" & a2.find("1")
' response.write "<br/>find 3:" & a2.find("3")

'// compre two array, is array equal.
' dim a4
' a4 = a2.getArray()
' response.write "<br/>is array equal:" & a2.equal(a4)



'// append new item.
a2.append("5")
' response.write a2.toString()

'// insert "2" before "3"
' a2.insert "2", 1
'// or
a2.insert "2", a2.find("3")

'// append array, a6 陣列加到 a2 陣列後面.
' dim a6
' a6 = a2.getArray
' a2.appendArray(a6)

'// count item. 查詢某個值在陣列裡出現的次數.
' response.write "<br/>count item 1: " & a2.countItem("1")

'// delete item,
'// 先查詢 "1" 出現在 a2陣列裡, 再使用 a2.deleteIndex 刪除該值.
a2.delete("1")

'// delete from array, 用來一次刪除一堆的值.
dim deleteResult
dim deleteArraySet
set deleteResult = new maxArrayObject
deleteArraySet = array("4","5","6")
deleteResult.setArray(a2.deleteFromArray(deleteArraySet))
response.write "<br/>deleteResult to string: " & deleteResult.toString()
'// 附註: { 2 ,3 ,5 } - { 4 ,5 ,6 } = { 2 ,3 }

'// 計算加總.

' response.write "<br/>sum: " & a2.sum



'// 計算平均.
' response.write "<br/>average: " & a2.average


'// 存取陣列某一筆.
response.write "<br/>item 1: " & a2.item(0)

'// 輸出陣列內容.
response.write "<br/>to string: " & a2.toString()
%>







附件列表: ArrayObject.zip

max.Array.Function.asp , 副程式.
max.Array.Object.asp , 物件化的程式.




附註:
如果您有在使用這個物件, 並有加強他的功能的話, 請再把您修改過的寄給我用, 謝謝.

2010年1月7日 星期四

[Asp].存取不同網站的 session 資料.


程式目的:
存取不同網站的 session 資料.


使用方法:
用 web serivce 去要資料.


附註:
可以把所有 "非" object 資料的 session 以文字方式傳回來, 網站間可以只傳1個變數(比較有效率), 也可以全部變數都傳回來.


  • \SiteA\caller.asp client 端的主程式, 這個範例是去要 server 端的 mem_userid 這個變數回來.
  • \SiteA\inc\WinHttp.asp client 端的副程式
  • \SiteB\xdGetSessionSet.asp server 端的主程式

Facebook 留言板