顯示具有 ASP.NET 標籤的文章。 顯示所有文章
顯示具有 ASP.NET 標籤的文章。 顯示所有文章

2010年7月9日

C# FileUpload Size Limitation

使用 FileUpload 控件時,
有時會出現 [無法顯示網頁] 的錯誤現象.
觀察結果並不是每個檔案都會如此,
只有較大的檔案才會..
於是往上傳大小的方向去找答案,
果然是對上傳大小做了限制

ASP.NET 為防止有心人例用 FileUpload 上傳巨大檔案去癱瘓系統
於是設定 max request length 為 4096(4MB) 的限制
超過就不會回應
修正方式為修改 web.config 中的 httpRuntime Tag
將其 maxRequestLength 的屬性加大即可
如下,將數值改為 10240 即為允許 10MB 的上傳了

<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<httpRuntime maxRequestLength="1024"></httpRuntime>
</system.web>
</configuration>






2009年2月10日

ASP.NET Web Hosting at Domaincheck.net

對 ASP.NET 開發者來說
網路上免費的 Web Host 資源實在少得可憐
即使有,也是限制一堆
更別說會提供 MSSQL 的支援了

Domaincheck.net 雖不提供免費的 WebHosting
但是只要在他們那裡註冊域名, 就會提供一個 Web 空間
可選擇 PHP 或 ASP.NET
且 ASP.NET 的方案可支援 DotNetNuke 及 MSSQL,
該有的也都有,算很不錯了

最大的缺點是會有一個廣告橫在上面...有點討厭
但只要不是輸出一般的 text 似乎就可以避開
例如在 .js 裡面寫 document.write("...");
是可以正常顯示的
所以拿來做頁面 widget 很好用
另外最近在玩的 facebook app 應該也可以躲開廣告

之前還一直面臨一個大缺點: 不能由使用者上傳檔案
有些功能會希望讓 User 上傳圖片什麼的,完全不能作
應該是因為網站並有開放權限給 Internet user
既是安全考量,也沒辦法多說什麼了
但這幾天在試 Access DB 時
發現 Domaincheck.net 其實開放了一個特定目錄:~/access_db/
Access 的 mdb 檔案一定要放在該目錄下才能寫入
所以推測該目錄應該也允許上傳才是
試了之後果然是可以的~
若在該目錄下建立其他子目錄也一樣可以上傳檔案
所以算是解決了一個大缺點

2009年2月8日

用 C#.NET 開發 Facebook application - 相關資源整理

Facebook 官方網站上的範例大多是 PHP 為主, 對 .NET 的說明不多, 所必須自行到網路上搜尋.
以下整理我開始接觸 Facebook app 開發時所找的一些資源.

* Facebook Developer Toolkit 這是主要的核心,提供了 facebook api 介面的 DLL 包裝
有了這些 DLL 就可以存取 facebook 的資源了,不過這裡並沒有什麼範例可供參考
* 可以在這裡找到 Toolkit 的基本使用方法
* Steven Trefethen 則進一步把上述的 ToolKit 整合到 Visual Studio 裡,
建立了 Starter Kit, 提供了基本的功能頁面,Starter Kit 建立的小範例已經可以直接 Deploy
在他的 wiki 頁面中也有基本的 Step by Step, 而且是以 .NET 開發者的角度來說明,蠻不錯的
不過只到建立 Hello World 的程度,還沒看到實用級的範例
* 在 Scribd 找到一份 Facebook Tool Kit 的使用手冊(pdf)
* 在 Siccolo 的網站上終於找到一個實用的範例,使用Dashboard,發佈通知等.不過他的版本似乎有點舊,
與Toolkit提供的 api 不大一樣,要稍作修改.
* Facebook-C-Sharp Project: 這裡提供了在外部網站存取 facebook 資料的工具,
這裡討論到一個 Issue:
facebook 的開發規範中明確規定一定要由 User 輸入 ID,Password
不允許寫在程式中自動登入
這個限制使得外部程式在使用上變得很不方便
facebook c shart 則企圖使用程式抓取登入頁面程式碼,再模擬登入的方法來解決
如此一來不但可由程式自動登入,而且還在可經由模擬登入取得很多官方 API 所不支援的功能!!
對外部程式的開發者真是一大福音,可惜後果要自負..哈

2009年1月8日

使用 AccessMemberShip Provider

由於一般的免費 Host 空間都只支援 MS Access
所以找了一下使用 MS Access 的 MemberShip Provider
誰知在 微軟 網站上找了半天仍遍尋不著
後來才發現是因為微軟希望普偏使用 SQL Express
所以把後來的 Visual Studio 中預設的 MemberShip Provider 都改成 SQL Express
並且還把原本提供的 MS Access 版本由微軟網站中移除!

由於一般自行開發的 Access Provider 功能都不完整, 大都缺少 Roles 及 Profiles 的功能
所以還是想要找出之前微軟提供 AccessMemberShip Provider

在 Google 搜尋的大部份文章中也都找不到原本的連結
最後終於在這裡找到了~~
看來AccessMemberShip Provider 真的是很稀有
趕快作一個備份

Download:
1.AccessMembershipProvider.rar
2.Web.Config
3.Install.rar

2009年1月6日

ASP.NET URL 參數的亂碼問題

因為想要收集瀏覽頁面的 Title 字串
於是在前端頁面使用以下的 javascript 程式:

var myCounter_URL = "http://www.mywishmemo.com/Demo.aspx";
myCounter_URL += "?Title="+escape(document.title);
window.location = myCounter_URL;

但在後端頁面中以 Request.Params.Get("Title") 取出後再印出來卻發現中文變成了亂碼..
上網查詢後找到以下解決方案...解決方式

文中提到了二個方式,
1.在 JSP 中可使用 new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"); 的方式取回,但在 ASP.NET 中找不到相同的函式,所以先放棄此法
2.在前端使用二次 encodeURI(), 在後端程式中再以 URLDecode 還原,這個可行!

最後解決的程式碼如下:
前端:

var myCounter_URL = "http://www.mywishmemo.com/Demo.aspx";
myCounter_URL += "?Title="+encodeURI(encodeURI(document.title));
window.location = myCounter_URL;


後端:


string pageTitle = Request.Params.Get("Title");
pageTitle = HttpUtility.UrlDecode(pageTitle, System.Text.Encoding.UTF8);


另外在這個頁面中則比解了 Javascript 裡面 escape, encodeURI, encodeURIComponent 三個函式的不同

使用 UTF 編碼後,若需要截斷字串以存入資料庫,
則要注意截斷的位置
UTF-8每個字元由 3 個字元組成
而使用 UrlEncode 後,每個字元又會變成 %ab 這樣的格式
所以一個中文字在編碼後會變成 9 個符號,例如 %e5%85%b6
以這個字串為例 : "由 IP 反查"
則編碼後會變成:+%e7%94%b1+IP+%e5%8f%8d%e6%9f%a5
可注意到空白的部份變成 + 號, 英文不變, 每個中文則對應為 9 個符號一組
截取時除了要確保 % 號之後一定要有 2 個字, 也要注意 % 的數量應為 3 的倍數

2009年1月4日

ASP.NET Free Host

1.Brinkster
30 mb web space
500 MB WEB TRAFFIC (limited to 16.7 mb web traffic per day)
1 brinkster.net e-mail account with 10 mb space
MS ACCESS



2.Quantasoft
100 MB Disk Space
2G Monthly Data Transfer
ASP.NET 3.5
ASP.NET AJAX
MS ACCESS
MS SQL 2008 Express Edition (User Instances only)

3.ASP Spider.NET
Windows 2003 Server
.NET Framework 3.5
SQL Server 2005 Express
10MB
90 days limit

2008年12月28日

System.Data.Common.DataRecordInternal 無法使用的問題

以往使用 Connection 時都是直接 new 一個
但我不知道這樣使用是否仍有 ConnectionPool 的功能
所以改用 SqlDataSource,
但我又不想去 Bind 其他元件(我只是單純要讀出資料來用而已)
故決定直接使用 SqlDataSource.Select()
程式碼如下:
SqlDataSource1.SelectCommand = "SELECT * FROM mytable";
IEnumerator enumerator = SqlDataSource1.Select(new DataSourceSelectArguments()).GetEnumerator();
while (enumerator.MoveNext())
Response.Write("

" + enumerator.Current.GetType());

執行後輸出的結果是一堆 System.Data.Common.DataRecordInternal 物件
我試著去使用這個類別,
System.Data.Common.DataRecordInternal aRow = (System.Data.Common.DataRecordInternal)enumerator.Current;
但compile後是錯誤的,無法使用
上網查了一下,發現也有很多人遇到這個問題
最後的結果是: 要強制轉型為 System.Data.Common.DbDataRecord
於是最後的程式碼:
SqlDataSource1.SelectCommand = "SELECT * FROM mytable";
IEnumerator enumerator = SqlDataSource1.Select(new DataSourceSelectArguments()).GetEnumerator();
while (enumerator.MoveNext())
System.Data.Common.DbDataRecord dr = (System.Data.Common.DbDataRecord)enumerator.Current;
Response.Write("

" + dr.GetString(0));
}

這樣就可以正確取得資料囉~

由 IP 反查其位址(IP To Location)

今天找了一些如何由 IP 反查得位址的文章
找到了一個測試OK的:MAXMIND
連過去後還有 javascript 的範例可供參考,蠻不錯的
可取得 country, region, city 及經緯度座標~

雖也有看到在討論 Google 的 API,
使用 google.loader.ClientLocation
不過似乎要先註冊取得 API Key ,
且我試了之後還是跑不出來...
ClientLocation 一直是 null

比起來, MAXMIND 的可說是簡單又好用

2008年12月25日

SharePoint Server 2007:使用 SmartPart 來快速開發 WebPart 組件

初次使用 SharePoint Designer 時發現居然不允許在開發頁面時直接崁入 C# 程式碼
網路上雖有人提出解決方法: 修改 Compilation, Code Behind
不過似乎有點麻煩, 也會影響效能
決定還是先回頭使用 Visual Studio, 開發能執行客製程式碼的 WebPart
這似乎也是一般建議的方式

在SharePoint上開發組件有二個稍微麻煩的地方
1.不支援 UserControl 的使用,所以在開發程式時無法以所見即所得的方式來撰寫程式
2.Deploy時要手動修改 web.config,加入一長串的程式Token

SmartPart 的出現解決這二個麻煩處,使開發及部署變得很簡單
其概念是先建立一個萬用WebPart, 再於這個萬用WebPart來包裝其他客製開發的UserControl
於是開發過程就得以簡化,
同時藉由整合 WSPBuilder ,自動建立Deploy的執行檔
原本須手動修改的動作都簡化為 mouse click 囉

SmartPart的實作步驟如下:
一.首先要安裝擔任Container的萬用WebPart -- Return of SmartPart
1.下載相關檔案 ReturnOfSmartPart.zip
2.解開後直接到Setup目錄下,可以看到ReturnOfSmartPartv1_3.wsp,這個就是主要的WebPart元件,
按下setup.exe後便會呼叫作者撰寫的Deploy精靈,不斷地進行下一步後就完成囉
在安裝前該程式還會自動檢查是否符合安裝要件:

3.安裝後還要再到Server上去啟動此功能,在[網站設定]->[網站集合功能]中,將Return of the SmartPart v1.3啟動即可


二.安裝 Visual Studio 2008 的 SmartPart 範本
1.在CodePlex下載 SmartTemplates
2.解壓縮後, 是二個範本的 zip 檔:
SmartTemplates SmartPart Project Template.zip
SmartTemplates WebPart Project Template.zip
直接將這二個 zip 檔放到 Visual Studio 的 Template 目錄下即可
\我的文件\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\
重新啟動 Visual Studio 之後就可以在新增專案時看到了


三.使用SmartPart快速開發WebPart
1.啟動Visual Studio後,在新增專案時可以看到多了二個範本:
SharePoint Web Part
SmartPart Web Part
前者是使用一般的方式來開發Web Part,在類別檔(*.cs)的程式中自行撰寫程式
後者則是套用SmartPart,直接開發UserControl(*.ascx)即可
但不論選哪一個,都會有內建的 SETUP 資料夾,提供快速部署的功能檔案
我們當然是選用 SmartPart Web Part 來開發囉
2.Reference MicrosoftSharePoint.DLL
由於我的開發環境不在 SharePoint Server 的那台機器上
所以在開發時便需要先把 MicrosoftSharePoint.DLL 複製到本機上來
這個檔案可以在SharePoint Server上的路徑找到:
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI\Microsoft.SharePoint.dll
3.取消Compile時自動執行Deploy的功能
由於SmartTemplate預設在Compile成功後,便會自動執行 Deploy 的指令
若像我一樣開發環境不在 Server 上, 則 Compile 後的指令便會產生錯誤
WSPBuilder 無法順利產生 wsp 檔,同時也無法立即執行 Deploy
這個問題應該可以藉由修改範本中 WSPBuilder 的參考路徑及指定主機位址來解決
不過我對WSPBuilder還不熟,就先直接把這個後段的指令取消即可
取消的方法很簡單,在Project上以右鍵開啟屬性
將[建置事件]中的[建置後事件命令列]中的二個指令清空即可


由原本的指令中也可以發現, 其實SmartPart也只是去呼叫 ./WSP/createwsp.bat 而已
我們等會自己再手動執行即可
4.撰寫 UserControl 程式碼...
5.執行 Compile,並將整個目錄複製到 SharePoint Server 上
切記要整個複製過去,裡面應包含 WSP 及 Setup 目錄


6.手動執行 ./WSP/createwsp.bat
原本在開發環境下執行時都會出現找不到 MicrosoftSharePoint.DLL 的錯誤
這時已可順利完成,並自動產生 *.wsp 的部署檔案了

7.最後一個步驟就是執行 ./Setup/setup.exe 囉
同樣會呼叫前面安裝 Return Of SmartPart 時的Deploy程式

檢查安裝要件後,再勾選要部署的WebSite即可順利 Deploy


完成後同樣記得到 [網站設定]->[網站集合功能]中將新安裝的 WebPart 功能啟動就大功告成~