Flex Call Javascript Function:
Flex Code:
var obj:Object = ExternalInterface.call('jsFunctionName', 'parameter1', 'parameter2', .........);
2008/11/28
Flex呼叫Javascript function
2008/11/13
C# 抓取圖片- Header 問題
最近在使用C# 抓圖片...
但是有些竟然抓不下來...
後來找到解答...
原來可能對方Server會擋..
所以必須模擬我是Firefox ..
程式碼如下:
--
/// <summary>
/// 從某網址得到那網頁的Source
/// </summary>
/// <param name="url">檔案網址</param>
/// <param name="path">儲存位置</param>
/// <returns></returns>
public void GetBytesByUrl1(string url, string path)
{
try
{
WebClient client = new WebClient();
client.Headers.Add("Accept-Language: en-us,en;q=0.5");
client.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
client.Headers.Add("Accept-Encoding: gzip,deflate");
client.Headers.Add("Keep-Alive: 300");
client.Headers.Add("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3");
client.DownloadFile(url, path);
}
catch (WebException ex)
{
Debug.WriteLine(ex.Message);
}
}
--
有沒有很溫馨
2008/10/27
2008/10/24
C# WebService Client 設定
開發環境為 Visual Studio 2008
設定完成後會有一個 MasterService 類別,使用這個類別的 Service 就可對 WebService 的各個方法進行存取了。
MasterService.Service service = new MasterService.Service();
service.XXXWebMethod();
點選左下角的 Advanced... 按鈕
點選左下角的 Add Web References ...
輸入 URL: http://www.diija.com.tw/API/MasterService.asmx, 注意:不用加上 ?WSDL"
crossdomain 設定
須取名為 crossdomain.xml,並放在網站上的根目錄
http://www.diija.com.tw/crossdomain.xml
*.2kuso.com : wildcard 設定,www.2kuso.com, ww2.2kuso.com 都符合規則,因此會套用。
domain 可以設為 ip 格式, domain="140.119.182.100"
headers="SOAPAction", 有些瀏覽器(IE)如果沒有設 SOAPAction 會無法取得 WebService 的回傳內容。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<!-- secure = false, means allow https access -->
<allow-access-from domain="*.2kuso.com" secure="false" />
<allow-access-from domain="*.diija.com" secure="false" />
<allow-access-from domain="*.diija.com.tw" secure="false" />
<allow-access-from domain="140.119.182.100" secure="false" />
<allow-http-request-headers-from domain="*.2kuso.com" headers="SOAPAction"/>
<allow-http-request-headers-from domain="*.diija.com" headers="SOAPAction"/>
<allow-http-request-headers-from domain="*.diija.com.tw" headers="SOAPAction"/>
<allow-http-request-headers-from domain="140.119.182.100" headers="SOAPAction"/>
</cross-domain-policy>
2008/10/23
VirtualBox NAT forword 設定
注意,在 Guest 裡 NAT 設定是 ping 不到主機的。
#CentOS-5.2 為 Guest 名稱。
如果改壞了設定,可以到 $HOME/.VirtualBox\Machines\CentOS-5.2\CentOS-5.2.xml 修改。
改完必須重新啟動 VirtualBox 才會生效。
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" value="TCP"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" value="22"/>
<ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" value="22"/>
##pcnet/0 是掛載的第一張網路配接卡, 1 是第二張,依此類推。
## ssh 是 key
Protocol, HostPort, Guest 必須對應到同一個 key, 這個 key 可以是任何合法字串。
#SSH TCP 標定
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP
#從 Host Port 22 轉到 Guest Port 22
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 22
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
#HTTP TCP 標定
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/Protocol" TCP
#從 Host Port 22 轉到 Guest Port 22
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/HostPort" 80
C:\Program Files\Sun\xVM VirtualBox>
VBoxManage setextradata "CentOS-5.2" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/apache/GuestPort" 80
Flex 取得某範圍亂數
程式function 如下:
public function GetRangeRandom(min:Number,max:Number):Number
{
return Math.round(Math.random()*(max-min))+min;
}
ex.我要如何取得 10 到 100的亂數 即可以呼叫
GetRangeRandom(10,100) ;
有沒有很溫馨..因為不知道AS Lib有沒有懶得查..
2008/10/22
C# PNG 轉 JPG 會變黑的問題
參考程式碼:
Image img = Image.FromFile(@"c:\source.png", true);
Bitmap bmp = new Bitmap(img );
Graphics graf = Graphics.FromImage(bmp);
graf.Clear(Color.White);
graf.DrawImage(img, 0, 0, img.Width, img.Height);
bmp.Save(@"c:\source.jpg", ImageFormat.Jpeg);
有沒有很溫馨
2008/10/20
使用 FABridge 來呼叫 Flex App 內的函式
FABridge 介紹:
透過 FABridge 可以讓 JavaScript 幾乎可以完全存取 FlexApp 內的函式以及變數,讓 Flex 與 JavaScript 的溝通變得相當簡單,不用額外透過 ExternalInterface 來定義要存取的函式。
最極端的使用 FABRidge 就是在 Flex 拉好 UI,並透過 JavaScript 來控制這些 UI,可以省掉編譯的冗長等待,並且讓只會 JavaScript 的開發人員也可以開發 FlexApp。但缺點是工具不支援,以及 Client 端必須啟用 JavaScript。
FABridge 安裝:
Flex 端的設定:
MyMain.xml
<bridge:fabridge id="externalBridge" rootobject="{this}" bridge="bridge.*" />
將 C:\Program Files\Flex Builder 3\sdks\3.0.0\frameworks\javascript\fabridge\src\bridge\FABridge.as 複製到 src 的 bridge/FABridge.as
HTML 端的設定
將 C:\Program Files\Flex Builder 3\sdks\3.0.0\frameworks\javascript\fabridge\src\bridge\FABridge.js 複製到 html-template/ 資料夾。
在 html-template/index.template.html 中加入
<script type="text/javascript" src="FABridge.js"></script>
<script type="text/javascript">
window.onload = function() {
FABridge.addInitializationCallback('flash', initCallback); //初始化,等到 FlexApp 初始化完成時會去呼叫 initCallBack。
};
function initCallback() {
app = FABridge.flash.root(); //取出 MyMain
facade = app.getFacade(); //取出 MyMain 內的 facade,注意存取變數必須以 getter 方法取出。 facade 在 MyMain 中只是定義為 public var facade:IFacade; , 而不是 public function getFacade();
//alert('facade : ' + facade);
app.addEventListener('loginSucceed', function() { //取得登入結果事件,並接收登入資訊
userProxy = facade.getUserProxy();
//alert('userProxy : ' + userProxy);
userToken = userProxy.getUserToken();
//alert('userProxy.userToken : ' + userToken);
}
2008/10/17
Flex 檔案下載
private var fr:FileReference = null; //注意,要寫在外面,否則會被記憶體回收掉,下載時會找不到來源,按存檔時會無作用。
private function downloadClipboard(event:MouseEvent):void
{
var clip:Cls_Clipboard = this.selectedClipboard;
if (clip != null) {
fr = new FileReference()
fr.addEventListener(Event.COMPLETE, function():void {
fr = null; //載入完成時,才設成 null 等待記憶體回收。
trace('fr set null');
});
fr.download(new URLRequest(clip.ClipboardPath_Fix), getDownloadFilename(clip.ClipboardPath_Fix, "clipboard-"));
} else {
DiijaUtils.popMsg('請選擇一張剪影才能下載');
}
}
/**
* 回傳如下格式 clipboard-20081017150538.png
*/
private function getDownloadFilename(url:String, prefix:String="clipboard-"):String
{
var formater:DateFormatter = new DateFormatter();
formater.formatString = "YYYYMMDDHHNNSS"; //日期格式請參考 http://livedocs.adobe.com/flex/3/langref/mx/formatters/DateFormatter.html
var split:Array = url.split('.');
return prefix + formater.format(new Date()) + '.' + split[split.length - 1];
}
2008/10/15
如何讓 SWFLoader 與 被載入的程式作溝通
如果使用 SWFLoader 要跟其內部 程式 傳遞參數時,
只要被載入的程式有開放介面提供外部呼叫,
就可以透過 System Manager 來呼叫。
例如:
被載入的程式(SWFLoaded)開放的介面:public function setVarOne(newText:String):void
主程式範例:
private function onCompleteAppLoader(oEvent:Event):void
{
var smAppLoaded:SystemManager = SystemManager(oEvent.target.content);
smAppLoaded.addEventListener(FlexEvent.APPLICATION_COMPLETE, onCurrentApplicationComplete);
}
private function onCurrentApplicationComplete(oEvent:Event):void
{
_appLoaded = Application(oEvent.target.application);
SWFLoaded(_appLoaded).setVarOne("This value set from main app!");
}
參考連結:http://www.cflex.net/showFileDetails.cfm?ObjectID=690
2008/10/13
Flex 取得外部參數
假設你使用Flex 製作出一顆 SWF檔案
需要讀出外部參數
譬如
http://www.sample.com.tw/Main.swf?UserId=Lucifer
因為程式需求需要把UserId讀進來
你可以透過
Application.application.parameters["UserId"];
這方法讀進來
很溫馨吧 !!
2008/10/08
Flex Color Picker 範例
<mx:ColorPicker id="colorPicker" change="onColorPickerChange(event)" enter="onColorPickerEnter(event)"/>
/** 選取顏色觸發 **/
private function onColorPickerChange(event:ColorPickerEvent):void {
var color:uint = event.currentTarget.selectedItem as uint;
var colorHex:String = StringUtils.intToHexColor(color);
this.setStyle("backgroundColor", colorHex);
}
/** 輸入顏色值按 Enter 觸發 **/
private function onColorPickerEnter(event:ColorPickerEvent):void {
var colorHex:String = StringUtils.intToHexColor(event.color);
this.setStyle("backgroundColor", colorHex);
}
/** 將 int 轉為 #FFFFFF 顏色字串格式 **/
public static function intToHexColor(value:uint):String
{
var mask:String = '000000';
var str:String = mask + value.toString(16).toUpperCase();
return '#' + str.substr(str.length - 6);
}
2008/09/18
TabNavigation 標籤改變事件
private function onChange(IndexChangeEvent):void
{
//改變的目標
var child:DisplayObject = event.relatedObject; #相當於 tabnav.getChildAt(event.newIndex);
}
2008/09/10
設定 Subversion 不能匿名簽出程式碼
在 svn/svnserve.conf 裡 anon-access = read 為預設值,必須改為 anon-access = none
然後在 conf/authz 裡設定
[/]
@developer = rw #developer 為群組, 必須在群組名稱前加上 @
#* = r
2008/08/04
讓 SWFAddress 在發佈至網站上時可以存取本身的網頁
var so = new SWFObject('${swf}.swf', 'website', '100%', '100%', '9', '#869CA7');
so.useExpressInstall('swfobject/expressinstall.swf');
so.addParam('menu', 'false');
so.write('content');
so.addParam('allowscriptaccess', 'true'); //加入這行即可解決此問題。否則會有 sandbox security 錯誤。
2008/07/31
在ASP.NET使用 Rewrite 套件時注意事項
當你參考網址 http://www.dotblogs.com.tw/chhuang/archive/2008/04/19/2957.aspx 使用Rewrite 套件隱藏QueryString時,請注意你用的 IIS 版本如果為 6.0,則在執行以下步驟設定IIS的時候,注意引用萬用字元對應的方法已不再是於副檔名欄位內輸入『.*』,這方法已在IIS 6.0之後改掉了,而是參考以下網址:
http://technet2.microsoft.com/windowsserver/zh-cht/library/138a8ea6-680e-4c69-88fa-c57e9d0ea8131028.mspx?mfr=true
內容講到:
======================================================================
新增萬用字元應用程式對應至網頁伺服器或網站 | |||||||||||||||||||||||||
|
2008/07/23
補述WebConfig
之前ShinBan寫的過於含糊..
補述一份...
在Web.Config中...
可以發現一Section 叫做
裡面可以加入自己的需要的Key and Value
範例如下:
<add key="FittingImageFilePath" value="TempImg\" />
<add key="SourceImage" value="TempImg\" />
</appSettings>
其中我用了兩組需要的東西分別為 FittingImageFilePath,SourceImage
他們的值分別為 TempImg1\,TempImg2\
則在C#中如何呼叫呢?!
1.你必須先加入參考System.Configuration
2.你必須在你需要用到的地方先 using System.Configuration;
3.取用方式
下面範例是取用FittingImageFilePath得值
string FixClothPath = ConfigurationManager.AppSettings["FittingImageFilePath"];
這樣你把 FixClothPath 印出來就會是 TempImg1\
就這樣第一次使用 Configuration就上手..
有沒有很溫馨....
2008/07/09
解決終端服務90天限制問題
win2k服務器上裝了應用程序模式的終端服務,並打了sp4的終端服務破解補丁,經測試解除了時間限制。但服務器在一次系統自動更新以後,該補丁失效了。90天以後,客戶機不能再登陸到服務器。那個著急啊~~~~~~~~~
後來,這篇文章幫助了我:http://www.33d9.com/doc/article/641.html
貼出原文與大家分享:
Q:如何激活終端服務?
A:Win2K的終端服務有90天的限制,如果這90天內不激活它的話,過期之後就不能連接到Win2K終端了(不影響無盤DOS站的使用)。要 激活它首先得擁有一個七位數的註冊號碼(6565792或者5296992中任意一個均可),利用它再經過如下操作即可完成終端的激活:
(1)首先進入"我的電腦→控制面板→添加/刪除程序,選"添加/刪除 Windows 組件",然後確保已選中其中的"終端服務"和"終端服務授權"兩項。
(2)當安裝了"終端服務"和"終端服務授權"之後,在"開始→程序→管理工具"中就有"終端服務授權"一項,打開它,即可得到一個四段共20位數的"產品ID",抄下它。
(3)接入Internet,打開瀏覽器,進入https://activate.microsoft.com(注意是"https"而不是"http",這裡千萬不要少了那個"s")這個地址,此時是英文界面。在左上角的下拉框中選中"Chinese(Simplified)"(簡體中文)項,再按"GO"圖標。
(4)現在便得到的是中文網頁了。確保已選中"啟用許可證服務器"項,再單擊"下一步"按鈕。
(5)在隨後要求提供的信息界面中,"產品ID"處輸入剛才抄下的那個20位數字;"購買方式"為"Select or Enterprise Agreetment";再填入自己的其他基本資料,然後再選"下一步"繼續。
(6)此時系統會顯示你方才輸入的個人信息,確信無誤之後再 "下一步"。
(7)你便可以得到"已成功處理您的許可證服務器啟動申請。你的許可證ID是:…",又是一個需要抄下的分為七段的35位數,裡面包含有數字也有大寫的英文字母;並且還會問你"需要此時獲取客戶機許可證嗎?",你當然應該?quot;是"。
(8)在接下來的界面中,"產品類型"一項應為"Windows 2000終端服務客戶機訪問許可證";"數量"為你欲連接的最大用戶數(比如為"100");在"註冊號碼"中輸入你從微軟獲得的那個七位數 (6565792或者5296992中任意一個均可),再"下一步"。
(9)此時又是讓你確認你的操作,無誤後按"下一步"。
(10)現在應該是"謝謝您激活終端服務許可證"的時候了!你的收穫包括兩個東東,一個是剛才已經得到的那個35位數的"許可證服務器ID",一個是現在才取得的另一個七段共35位數的"許可證密鑰包ID"。恭喜你!
(11)現在該重新回到"開始→程序→管理工?quot;的"終端服務授權"中,用"下一步"大膽地前進吧!
(12)當要求你指定註冊時的"連接方法"時選"萬維網",再"下一步"。
(13)根據提示逐字認真輸入所獲得的那個"許可證服務器ID"。
(14)現在便完成了授權嚮導,還需要"立即安裝許可證","下一步"繼續。
(15)根據提示逐字認真輸入所獲得的那個"許可證密鑰包ID"。
(16)長出了一口氣:現在就再也沒有90天的後顧之憂了!
(17)等等!還有一步呢!再選中"終端服務授權"中的"SERVER"(服務器名),單擊右鍵,啟用即可。
另外,windows 2003的終端服務也可以激活:)
2008/05/21
switch with no case will report internal build error when compiling
var foo:int = 2;
switch (foo) {
}
一定要在 switch 裡面放 case,否則編譯時會回報 internal build error。Flex Builder 不會指出是這個敘述不正確,找 error log 也看不出所以然來。
如果沒注意到這件事,會讓你 debug 很久。
2008/04/16
Flex中替代cookit操作的方法
做登錄等類的身份驗證功能,傳統的WEB開發基本上都要使用session或是cookit。然而在Flex中並沒有提供直接操作cookit或是session的方法。經過查資料發現,Flex提供了SharedObject這個本地對象。有人把它稱為「Flash Cookie 」。還真是形象啊,呵,不管怎麼說,畢竟還是有解決辦法的。
SharedObject提供了下面的操作本地對象的方法:
SharedObject.clear() 刪除本地共享對像;
SharedObject.flush() 立即把共享對像數據寫入本地文件;
SharedObject.getLocal() 創建或連接本地共享對像;
SharedObject.getSize() 取得本地共享對象的指定大小數據。
舉個應用的小例子:
保存值:
var test:SharedObject = SharedObject.getLocal( "test" );// 創建一個本地保存數據的對象
test.data.user = "username";
test.data.psw = "password";
test.flush(); //提交保存
取值:
var test: SharedObject = SharedObject.getLocal("test");
Alert.show(test.data.user);
Alert.show(test.data.psw);
注意如果使用alert,要引入 import mx.controls.Alert類
2008/04/01
歐洲巨兔
據英國媒體報導,日前英國一隻3歲大的雌兔,憑藉1.2米的身長和22公斤的體重,成功打破世界紀錄,獲得「世界最大兔子」的桂冠。
據主人愛德華茲介紹,這隻兔子名叫「艾米」,現在體重22公斤,食量驚人。如果身體伸展開,體長達1.2米。
艾米每天的食物都要花10英鎊左右,每餐都要吃掉2個蘋果、幾個胡蘿蔔、半顆捲心菜以及幾把乾草。由於食物過多,愛德華茲不得不用狗盆給艾米當碗。而由於體型過大,艾米不得不睡在狗窩。愛德華茲說,艾米對食物很挑剔,「胡蘿蔔必須是帶綠色葉子的,乾草也必須是新鮮的、綠色的,否則她不吃。」
據悉,此前世界上最大的兔子是艾米的配偶「羅伯特」,2004年,羅伯特從後腿到前爪的長度為1.05米,體重15.9公斤,當時這個體重要比3歲的孩子還要重。艾米比羅伯特小1歲,2004年時它只有0.5米長、6公斤重。但是現在它無論是身長還是體重都超過了羅伯特,因此當之無愧成為世界上最大的兔子。艾米和羅伯特都屬於歐洲巨兔。目前兩隻兔子已經孕育出32個後代。歐洲巨兔平均體重6公斤左右,壽命可達12年。
目前,吉尼斯世界紀錄已經停止了類似巨兔的評選,以防止主人過度餵養寵物帶來的負面影響。
有圖有真相...
真相在下面...
Flex 3 Call .Net WebService (3)
Flex 3 程式碼如下
分別測試跟呼叫之下的 Web Service
程式碼如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Button x="75" y="52" label="Add a data." click="btnInsert_Clidk();" width="133"/>
<mx:Script>
<![CDATA[
import generated.webservices.GetUserInfoCount_request;
import generated.webservices.GetUserInfoCountResultEvent;
import generated.webservices.ArrayOfUserInfo;
import mx.collections.ArrayCollection;
import generated.webservices.GetUserInfoArrayResultEvent;
import generated.webservices.AddUserInfoResultEvent;
import generated.webservices.AddUserInfo_request;
import generated.webservices.TestService;
import generated.webservices.UserInfo;
import mx.controls.*;
// TestService
private var objService:TestService=new TestService();
public function btnInsert_Clidk():void
{
objService.addaddUserInfoEventListener(resultAddUserInfo);
//新增一筆資料 呼叫 WebService 中的 AddUserInfo(string name,string tel,string addr)
objService.addUserInfo("Lucifer.Loudon","0917796416","台北市內湖區");
}
//取回結果並用Alet.show方式秀出
public function resultAddUserInfo(evt:AddUserInfoResultEvent):void
{
Alert.show("Name:" + evt.result.Name +", Tel:"+ evt.result.Tel+", Addr:"+evt.result.Addr);
}
public function btnGetAllData_Click():void
{
objService.addgetUserInfoArrayEventListener(resultGetUserInfo);
//呼叫 UserInfo[] GetUserInfoArray()
objService.getUserInfoArray_send();
}
public function resultGetUserInfo(evt:GetUserInfoArrayResultEvent):void
{
var list:ArrayCollection = evt.result as ArrayCollection ;
dg.dataProvider=list;
}
public function btnGetArrayCount_Click():void
{
var list:ArrayOfUserInfo=new ArrayOfUserInfo();
for(var i:int=1;i<=20;i++)
{
var tmp:UserInfo=new UserInfo();
tmp.Name="Name"+i.toString();
tmp.Tel="TEL"+i.toString();
tmp.Addr="Addr"+i.toString();
list.addItem(tmp);
}
//呼叫 GetUserInfoCount(UserInfo[] userInfos) 並傳入 UserInfo[20]
objService.addgetUserInfoCountEventListener(resultGetArrayCount);
objService.getUserInfoCount(list);
}
public function resultGetArrayCount(evt:GetUserInfoCountResultEvent):void
{
Alert.show(String(evt.result));
}
]]>
</mx:Script>
<mx:Button x="75" y="106" label="Get AllDataInfo" width="133" id="btnGetAllData" click="btnGetAllData_Click()"/>
<mx:DataGrid x="75" y="179" width="399" height="258" id="dg">
<mx:columns>
<mx:DataGridColumn headerText="Name" dataField="Name"/>
<mx:DataGridColumn headerText="Tel" dataField="Tel"/>
<mx:DataGridColumn headerText="Addr" dataField="Addr"/>
</mx:columns>
</mx:DataGrid>
<mx:Button x="242" y="52" label="Get Array Count" width="138" id="btnGetArrayCount" click="btnGetArrayCount_Click()"/>
</mx:Application>
Flex 3 Call .Net WebService (2)
1. 開啟Flex 3 並新增專案 命名為 FlexCallWebServiceSample
2. Import 自己寫的WebService 也是 Flex 3 新增號稱強大的功能
選擇 Data - > Import WebService (WSDL)
3. 會出現此畫面 就選擇你要放的地方 我是採用預設所以直接按下Next
4.請在框1地方輸入WebService 位置 記得後面加上?wsdl不然一定不會成功
之後按下框2的Next
5.
接下來就是Mega(台語),框1地方請將預設的Service1Soap12 改成 Service1Soap根據官方網站的論壇是說目前現在如果選擇Soap12會出現問題,沒錯,我之前就是卡關卡在這邊,天殺的害我試了好久,記的這邊部要傻傻的就給他用預設的,框2部分果真可以看到他抓到我寫的4隻Web Service,框3部分可以自行命名在Felx中你要用啥名稱稱呼這隻Service他預設
他預設Package: generated.webservices ,Main Class: Service1
我只有改變其Main Class 為 TestService ,之後就可以大膽按下框4
6.之後應該是會看到這樣的結構..
Flex 3 Call .Net WebService (1)
首先我們得先建立WebService ..
開啟VS.Net ...
並且建立一個 Class 為
public class UserInfo
{
public string Name{get;set;} //姓名
public string Tel{get;set;} // 電話
public string Addr{get;set;} //地址
}
並建立下述的WebService 以提供測試
我直接原程式碼Po上...
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
namespace TestFlexWebService
{
/// <summary>
///Service1 的摘要描述
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下一行。
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
/// <summary>
/// 一個暫存的ArrayList 提供 GetUserInfoArray() 所使用
/// </summary>
public static ArrayList PubList = new ArrayList();
/// <summary>
/// 新增一個UserInfo 至 PubList 中 並且回傳回去
/// </summary>
/// <param name="name">UserInfo的Name</param>
/// <param name="tel">UserInfo的Tel</param>
/// <param name="addr">UserInfo的Addr</param>
/// <returns>回傳回去一個UserInfo的物件</returns>
[WebMethod]
public UserInfo AddUserInfo(string name,string tel,string addr)
{
UserInfo res = new UserInfo();
res.Name = name;
res.Tel = tel;
res.Addr = addr;
PubList.Add(res);
return res;
}
/// <summary>
/// 將PubList 此UserInfo Array 傳出去
/// </summary>
/// <returns>UserInfo Array</returns>
[WebMethod]
public UserInfo[] GetUserInfoArray()
{
return (UserInfo[])PubList.ToArray(typeof(UserInfo));
}
/// <summary>
/// 傳入一UserInfo Array 並回傳裡面有多少個UserInfo
/// 已測試是否.Net 此端是否可以接到到Flex傳入的UserInfo Array.
/// </summary>
/// <param name="userInfos">UserInfo Array</param>
/// <returns>Length of UserInfoArray.</returns>
[WebMethod]
public int GetUserInfoCount(UserInfo[] userInfos)
{
return userInfos.Length;
}
}
}
之後就完成了.Net WebService 這一端..
接下來就是Flex3 那邊的部份了....
Flex 3 Call .Net WebService (0)
本文將介紹 Flex 3 如何去Call .Net WebService
基本上他多了很多自動化的功能(跟Flex2)比起來真的是舒服多了...
這文章有使用到的工具為 VS.net 2008 and Adobe Flex 3
有三項測試項目..
1. Flex 3 如何傳入自訂的 Class給 WebService 且 這自訂的Class為.Net WebService 所定義的
2. Flex 3 從.Net WebService 取得自訂的 Class Array 並且把他Bind 到 DataGrid 中
3. Flex 3 傳入一自訂的Class Array至 .Net WebService 中 並且回傳此Array的內容
接下來幾篇文章中都會提到一些方法....
LINQ基本操作
Insert
Customer newCust = new Customer();
newCust.CompanyName = "AdventureWorks Cafe";
newCust.CustomerID = "ADVCA";
db.Customers.InsertOnSubmit(newCust);
Update
var existingCust =
(from c in db.Customers
where c.CustomerID == "ALFKI"
select c)
.First();
existingCust.ContactName = "New Contact";
Delete
Order ord0 = existingCust.Orders[0];
OrderDetail detail0 = ord0.OrderDetails[0];
db.OrderDetails.DeleteOnSubmit(detail0);
Submit Changes Item
db.SubmitChanges();
2008/03/28
2008/03/27
SQL Server的Identity欄位使用、查詢、重設
查詢目前 Identity值:
有時我們需要查詢目前 table 中該 identity 欄位最大值是多少時,可以利用 dbcc 指令,如下:
dbcc checkident('product', NORESEED)
可以獲得目前最大值的結果。
重設目前最大 identity 值:
一樣利用 dbcc 指令,如下:
dbcc checkident('product', RESEED, 100)
如此一來, 便能將目前的最大 identity 值指向100,當然若故意設比目前最大值小時,系統仍會接受,
但若 identity 遇上重覆資料時(如將 identity 設為 primary key時),將會發生重大問題,
該 table 變成無法 insert 資料,因為會發生 primary key violation,
解決方法當然就是將目前的 identity 修復,直接使用dbcc checkident('product', RESEED)
或 dbcc checkident('product')(兩者等義)即可順利修復。
identity 欄位遇上 rollback 時:
當 identity 欄位碰到 rollback 時,會發生跳號現象, 也就是說在 transaction 中,
insert 了一筆資料, 但又 rollback 時,該 identity 號會消失,如下測試:
begin tran
insert into products (product) values ('test rollback')
rollback tran
dbcc checkident('product', NORESEED)
這個觀念很重要,因為要維持 identity 特性,但又發生 rollback,
所以系統就直接跳號處理,避免發生重覆編號的問題。
2008/03/26
ComboBox 選項迭代
for each(var item:Object in combo.dataProvider) {
trace("label : " + item.label);
trace("data: " + item.data);
}
2008/03/25
自動 import 類別
當引用了一個尚未 import 的類別時,Eclipse 應該會在錯誤的程式碼最左側出現 x 按鈕,點下去就會出現 import 類別的選項,但是在 Flex Builder 中沒有這項功能。
解決的辦法是使用程式碼自動完成功能,Flex Builder 就會自動 import 所需的類別了。
判斷圖片是否載入完成
Image 類別繼承自 SWFLoader ,因此有 complete 事件,當圖片完成載入完成時會立刻觸發 complete 事件。
如果要取得圖片的寬度和高度應該使用
Image.contentWidth 和 Image.contentHeight。
在 complete 事件方法裡去取得 Image.width 和 Image.height 有時會得到零。
2008/03/24
Object 迭代
public static const CODE_MAP:Object = {
A: "上衣",
B: "針織衫",
C: "褲子",
D: "外套毛衣",
E: "裙子",
F: "洋裝",
G: "針織衫",
H: "帽鞋",
I: "配件包包",
J: "貼身衣物",
K: "其他"
}
for 迭代的結果是取出 key
for each 迭代的結果則是取出 value
for (var key:String in CODE_MAP) {
trace("key : " + key);
}
for each (var value:String in CODE_MAP) {
trace("value : " + value);
}
讓圖片(Image)可以單向放大縮小
只要將 Image 的 maintainAspectRatio 設為 false,圖片即可單向放大縮小,而不是依照等比例來放大縮小。
另外要設定 scaleContent = "true" 圖片才能放大縮小。
2008/03/23
當您使用 Visual C# . NET 使用 CookieContainer 來維護狀態在 Web 服務
在編寫 WebService 的時候,根據預設值, ASP . NET 工作階段支援之每一個 Web 服務方法已關閉。 您必須明確地啟用工作階段之每一個 Web Service 方法需要工作階段狀態支援。 若要啟用工作階段支援, WebMethod 屬性 (Attribute) 加入 EnableSession 屬性。 如果要執行這項操作,只要於 [WebMethod] 加入 EnableSession Attribute 即可
Example:
[WebMethod(EnableSession = true)]
public int Counter()
{ int count;
if (Session["count"] == null)
{
count = 1;
}
else
{
count = (int)Session["count"] + 1;
}
Session["count"] = count;
return count;
}
讀取時要設定一個CookieContainer變數來保留與WebService建立的Session連線
Example:
private System.Net.CookieContainer CookieContainer_c1;
protected void Btn_TestWebServiceSession_Click(object sender, EventArgs e)
{
this.s1 = new WebApplication1.EX_Service.Service1();
if ((System.Net.CookieContainer)Session["CookieC"] == null)
{
this.CookieContainer_c1 = new System.Net.CookieContainer();
Session["CookieC"] = this.CookieContainer_c1;
}
else
{
this.CookieContainer_c1 = (System.Net.CookieContainer)Session["CookieC"];
}
this.s1.CookieContainer = this.CookieContainer_c1;
this.showMessage(this.s1.Counter().ToString());
}
2008/03/22
PureMVC 文章
From Cairngorm to PureMVC : a quick comparison | Flex My Day
Handling deferred view component creation within the PureMVC framework
PureMVC_Implementation_Idioms_and_Best_Practices.pdf
Flex 框架比較投影片
https://admin.adobe.acrobat.com/_a200985228/p12266504/
2008/03/21
FlexBuilder3 出現 An internal build error has occurred 的解決辦法
Help -> Product Details ... -> Configuration Details -> View Error Log
之後會直接開啟 C:\diija\workspace\.metadata\.plugins\org.eclipse.ui.workbench\log 這個檔案,也可以手動去開啟這個檔案來查看錯誤原因,注意,最新的 log 訊息是放在最下方。
後來查到是因為 switch 沒有內容的關係
switch ( note.getName() )
{
}
java.lang.NullPointerException at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.SwitchStatementNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evalAndFold(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.StatementListNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.FunctionCommonNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.FunctionDefinitionNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.StatementListNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.ClassDefinitionNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.StatementListNode.evaluate(Unknown Source) at macromedia.asc.semantics.ConfigurationEvaluator.evaluate(Unknown Source) at macromedia.asc.parser.ProgramNode.evaluate(Unknown Source) at flex2.compiler.as3.Compiler.parse1(Compiler.java:314) at flex2.compiler.API.computeSignatureChecksum(API.java:2073) at flex2.compiler.API.validateCompilationUnits(API.java:1658) at flex2.tools.oem.Application.compile(Application.java:744) at flex2.tools.flexbuilder.BuilderApplication.compile(BuilderApplication.java:354) at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder$MyBuilder.mybuild(ASApplicationBuilder.java:271) at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder.build(ASApplicationBuilder.java:122) at com.adobe.flexbuilder.multisdk.compiler.internal.ASBuilder.build(ASBuilder.java:139) at com.adobe.flexbuilder.multisdk.compiler.internal.ASItemBuilder.build(ASItemBuilder.java:73) at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.buildItem(Unknown Source) at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.build(Unknown Source) at com.adobe.flexbuilder.project.compiler.internal.FlexIncrementalBuilder.build(Unknown Source) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:624) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:166) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:197) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:246) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:249) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:302) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:334) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:137) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
2008/03/20
SQL Server英文字母大小寫的判別
在資料庫上按滑鼠右鍵--> 內容 ...
在[一般]頁籤的最下方,即可看到此資料庫的 定序名稱...
定序名稱 可分解為:
使用語言字串
[_指定大寫] ==> 若加上 _Pref 即表示指定大寫,未加則不指定。
[_是否指定大小寫] ==> _CI 指定不分大小寫,_CS 指定區分大小寫。
[_是否區分腔調字] ==> _AI 指定不分腔調字,_AS 指定區分腔調字。
[_二進位排序] ==> 若加上 _BIN 即表示以二進位排序,未加則不指定。
舉例來說:
Chinese_Taiwan_Sroke_CI_AS <== 表示以繁體中文,不分大小寫,區分腔調字
Chinese_Taiwan_Sroke_CS <== 表示以繁體中文,要區分大小寫
程式碼編排
本文介紹 Pygments 的程式碼編排服務,這個 Web 服務可以將程式碼轉換為 HTML 格式,然後再將 HTML 貼至 Blogger 中,即可在 Blogger 中顯示編排及美化後的程式碼。
另外有一個 JavaScript 寫的 SyntaxHighlier 程式庫可以使用 JavaScript 來編排程式碼,但是 Blogger 沒辦法上傳 .js 檔,而且不支援 ActionScript 代碼轉換。
Pygments 支援一般常見的程式碼轉換,只要不太過於冷門的都有支援, Pygement 是 Python 寫的 OpenSource 程式庫。
在首頁中有一個介面,有幾個欄位是必填的,首先輸入 Code Description, 然後選取程式語言(Language), 之後把程式碼貼上,按 Hightlight 按鈕即會輸出 HTML。
然後觀看此頁的原始碼,將以下這段截取下來,貼至 Bloger 文章裡。
最後把程式碼的樣式貼至 Blogger 的樣版裡,如果想改變程式碼的顏色可以改 pygments_style.css 裡的內容。
http://pygments.org/media/pygments_style.css
<style type='text/css'>
.syntax { background: #111111; color: #ffffff }
.syntax .c { color: #008800; font-style: italic; background-color: #0f140f } /* Comment */
.syntax .err { color: #ffffff } /* Error */
.syntax .g { color: #ffffff } /* Generic */
.syntax .k { color: #fb660a; font-weight: bold } /* Keyword */
.syntax .l { color: #ffffff } /* Literal */
.syntax .n { color: #ffffff } /* Name */
.syntax .o { color: #ffffff } /* Operator */
.syntax .x { color: #ffffff } /* Other */
.syntax .p { color: #ffffff } /* Punctuation */
.syntax .cm { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Multiline */
.syntax .cp { color: #ff0007; font-weight: bold; font-style: italic; background-color: #0f140f } /* Comment.Preproc */
.syntax .c1 { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Single */
.syntax .cs { color: #008800; font-style: italic; background-color: #0f140f } /* Comment.Special */
.syntax .gd { color: #ffffff } /* Generic.Deleted */
.syntax .ge { color: #ffffff } /* Generic.Emph */
.syntax .gr { color: #ffffff } /* Generic.Error */
.syntax .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
.syntax .gi { color: #ffffff } /* Generic.Inserted */
.syntax .go { color: #444444; background-color: #222222 } /* Generic.Output */
.syntax .gp { color: #ffffff } /* Generic.Prompt */
.syntax .gs { color: #ffffff } /* Generic.Strong */
.syntax .gu { color: #ffffff; font-weight: bold } /* Generic.Subheading */
.syntax .gt { color: #ffffff } /* Generic.Traceback */
.syntax .kc { color: #fb660a; font-weight: bold } /* Keyword.Constant */
.syntax .kd { color: #fb660a; font-weight: bold } /* Keyword.Declaration */
.syntax .kp { color: #fb660a } /* Keyword.Pseudo */
.syntax .kr { color: #fb660a; font-weight: bold } /* Keyword.Reserved */
.syntax .kt { color: #cdcaa9; font-weight: bold } /* Keyword.Type */
.syntax .ld { color: #ffffff } /* Literal.Date */
.syntax .m { color: #0086f7; font-weight: bold } /* Literal.Number */
.syntax .s { color: #0086d2 } /* Literal.String */
.syntax .na { color: #ff0086; font-weight: bold } /* Name.Attribute */
.syntax .nb { color: #ffffff } /* Name.Builtin */
.syntax .nc { color: #ffffff } /* Name.Class */
.syntax .no { color: #0086d2 } /* Name.Constant */
.syntax .nd { color: #ffffff } /* Name.Decorator */
.syntax .ni { color: #ffffff } /* Name.Entity */
.syntax .ne { color: #ffffff } /* Name.Exception */
.syntax .nf { color: #ff0086; font-weight: bold } /* Name.Function */
.syntax .nl { color: #ffffff } /* Name.Label */
.syntax .nn { color: #ffffff } /* Name.Namespace */
.syntax .nx { color: #ffffff } /* Name.Other */
.syntax .py { color: #ffffff } /* Name.Property */
.syntax .nt { color: #fb660a; font-weight: bold } /* Name.Tag */
.syntax .nv { color: #fb660a } /* Name.Variable */
.syntax .ow { color: #ffffff } /* Operator.Word */
.syntax .w { color: #888888 } /* Text.Whitespace */
.syntax .mf { color: #0086f7; font-weight: bold } /* Literal.Number.Float */
.syntax .mh { color: #0086f7; font-weight: bold } /* Literal.Number.Hex */
.syntax .mi { color: #0086f7; font-weight: bold } /* Literal.Number.Integer */
.syntax .mo { color: #0086f7; font-weight: bold } /* Literal.Number.Oct */
.syntax .sb { color: #0086d2 } /* Literal.String.Backtick */
.syntax .sc { color: #0086d2 } /* Literal.String.Char */
.syntax .sd { color: #0086d2 } /* Literal.String.Doc */
.syntax .s2 { color: #0086d2 } /* Literal.String.Double */
.syntax .se { color: #0086d2 } /* Literal.String.Escape */
.syntax .sh { color: #0086d2 } /* Literal.String.Heredoc */
.syntax .si { color: #0086d2 } /* Literal.String.Interpol */
.syntax .sx { color: #0086d2 } /* Literal.String.Other */
.syntax .sr { color: #0086d2 } /* Literal.String.Regex */
.syntax .s1 { color: #0086d2 } /* Literal.String.Single */
.syntax .ss { color: #0086d2 } /* Literal.String.Symbol */
.syntax .bp { color: #ffffff } /* Name.Builtin.Pseudo */
.syntax .vc { color: #fb660a } /* Name.Variable.Class */
.syntax .vg { color: #fb660a } /* Name.Variable.Global */
.syntax .vi { color: #fb660a } /* Name.Variable.Instance */
.syntax .il { color: #0086f7; font-weight: bold } /* Literal.Number.Integer.Long */
</style>