<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8136480488211782084</id><updated>2012-02-17T11:56:37.210+08:00</updated><category term='Office 365'/><category term='程式開發'/><category term='課程回應'/><category term='閒聊'/><category term='我的書'/><category term='WIF'/><category term='IT Pro要你知道的事'/><category term='技術文章'/><category term='Windows Server AppFabric'/><category term='研討會'/><category term='Silverlight 技術文件'/><category term='UML'/><category term='Silverlight 2 講堂'/><category term='Windows Azure'/><category term='Error'/><category term='Caching'/><category term='行動裝置應用程式'/><title type='text'>John的技術文件</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default?start-index=101&amp;max-results=100'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>154</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4828873007566259413</id><published>2012-01-14T01:42:00.001+08:00</published><updated>2012-01-14T01:42:19.914+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='IT Pro要你知道的事'/><title type='text'>資料放雲端，安全嗎?</title><content type='html'>&lt;p&gt;一直以來，很多朋友與合作夥伴，一聽到雲端，就會有這樣的問題。我想先請教各位幾個問題：&lt;/p&gt;  &lt;p&gt;如果你有十萬塊，請問你會放家裡還是放銀行?&lt;/p&gt;  &lt;p&gt;如果你有一百萬，請問你會放家裡還是放銀行?&lt;/p&gt;  &lt;p&gt;如果你有一千萬，請問你會放家裡還是放銀行?&lt;/p&gt;  &lt;p&gt;這幾個問題，對於大部分的人來說，答案都是&amp;quot;放銀行&amp;quot;。為什麼錢不放家裡，要放到別人開的銀行呢? 難道不怕錢被銀行的人偷走嗎? 事實上，你會放心把錢放銀行的原因，就是因為&lt;font color="#ff0000"&gt;銀行有一定的安全稽核機制，因此你把錢放銀行被監守自盜的機會，絕對比你把錢放家裡被小偷偷走的機會來得低很多&lt;/font&gt;。&lt;/p&gt;  &lt;p&gt;公司裡的資料何嘗不是如此? 當你把資料放在公司中，可能會因為系統外包，而被外包的開發人員下載複製帶走；也可能因為開發人員的疏失，而造成系統的漏洞被盜走；更可能因為資料庫管理員沒有落實備份備援計劃，當機房或是伺服器發生問題時，導致重要資料的遺失...&lt;/p&gt;  &lt;p&gt;所以資料放雲端安不安全，其實只是一個觀念上的問題。對於企業來說，&lt;font color="#ff0000"&gt;資訊安全的問題，有七八成是屬於管理面的責任，剩下的才是跟程式實作有關係&lt;/font&gt;；也因為這樣，所以才會有ISO 27001的資安標準(&lt;a title="http://www.bsigroup.tw/zh-tw/Training/Course-areas/Information-Security/" href="http://www.bsigroup.tw/zh-tw/Training/Course-areas/Information-Security/"&gt;http://www.bsigroup.tw/zh-tw/Training/Course-areas/Information-Security/&lt;/a&gt;)。如果你的公司沒有通過ISO 27001，如果你的外包廠商沒有通過ISO 27001的標準，那我可以告訴你，你的資料放在公司，絕對不會比放在雲端上面來的安全。至少在機房的管理上，Windows Azure雲端平台通過了ISO 27001的資安標準；而且當作業系統有重要安全更新的時候，還會自動提供安裝最新安全更新的作業系統版本，避免人為因素所造成的安全性漏洞。&lt;/p&gt;  &lt;p&gt;當然，也會有些人用剛通過的個資法，質疑雲端的安全性，其實這並沒有太大的關連。就如同剛剛所提到的，系統的安全性其實有大部分都跟管理有關，如果公司整體的資安管理沒做好，資料放哪裡都是不會安全的。就好比你中了大樂透第一特獎，如果你全家人都不跟外人說，錢放家裡也是可行(放得下的話)；但是如果你家人大肆張揚的話，就算你把錢存在銀行，歹徒也可以綁架你去拿這些錢，不是嗎?&lt;/p&gt;  &lt;p&gt;從另外一方面來看，也就是因為&lt;font color="#ff0000"&gt;一般公司的資料中心或是機房管理人員，並非具有專業的資安背景，因此若是將資料存放在管理更好、安全性更高的Windows Azure雲端平台當中，反而更安全!&lt;/font&gt; 當然，若是再搭配系統本身實作資料加密，與使用者驗證、授權、稽核等機制，就可以再提升系統整體的安全性!!&lt;/p&gt;  &lt;p&gt;面對資訊安全，請記得正確的觀念：&lt;font color="#ff0000"&gt;&lt;strong&gt;資訊安全是架構在良好的資安管理上的!&lt;/strong&gt;&lt;/font&gt; 如果你們沒有制定安全性的政策、程式與架構沒有review、員工沒有資安的觀念與訓練、沒有定期做資訊安全稽核、沒有做資安的弱點分析、沒有有效的掌控重要資料的存取權限、沒有即時監控系統執行的狀況.... 等等，只要其中任何一個資安管理的環節出錯，都會是資安的漏洞!&lt;/p&gt;  &lt;p&gt;資料放哪裡，老實說關係其實並沒這麼大。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4828873007566259413?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4828873007566259413/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4828873007566259413' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4828873007566259413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4828873007566259413'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2012/01/blog-post.html' title='資料放雲端，安全嗎?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-3116796604388497679</id><published>2012-01-10T23:30:00.001+08:00</published><updated>2012-01-10T23:31:13.321+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='IT Pro要你知道的事'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>把Windows Azure 搬回家?</title><content type='html'>&lt;p&gt;常常有些夥伴會問我，能不能把Windows Azure 裝在公司的機房裡 ?&lt;/p&gt;  &lt;p&gt;其實現階端，很多朋友對於雲端平台的名詞都比較有概念了，但是有些觀念的部分可能是因為沒有實際運用過，所以比較不清楚一點，讓我們用最簡單的方式來說明Windows Azure 雲端平台的概念。&lt;/p&gt;  &lt;p&gt;首先，先從公有雲和私有雲開始好了。民以食為天，我們就用開餐廳來舉例：假設是做小吃攤的話，你可以用自家的廚房，然後門口擺幾張桌子椅子，就開始做生意；但若是需要開餐聽賺大錢的話，就必須要有正式的店面，才可以容納川流不息的客戶，又不會影響自家人的三餐。&lt;/p&gt;  &lt;p&gt;而餐聽裡有廚房，有桌子椅子；你家裡也一樣有廚房，有桌子有椅子，但是絕對不是做生意用的! 除了這些設施之外，開餐館還需要有裝潢、招牌、會計、廚師等等這些你家裡不需要有的成員。所以我們可以說，開餐廳的一些基本設施我們家裡原本就有，我們在家裡就可以利用這些既有的設施，研發新的菜色，然後再請餐廳的廚師幫我們利用這些新菜色賺錢。&lt;/p&gt;  &lt;p&gt;&lt;img src="data:image/jpeg;base64,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" width="203" height="152" /&gt;&amp;#160; &lt;img alt="" src="data:image/jpeg;base64,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" width="151" height="152" /&gt;&lt;/p&gt;  &lt;p&gt;因此簡單的說，私有雲就是你家，公有雲就像是餐聽的店面。在Windows Azure雲端平台上面，有Web Role、Worker Role和SQL Azure等等服務，而你利用企業內既有的IIS、Windows Service與 SQL Server就可以模擬出來這樣的環境，所以其實並不需要在公司裡自己再架一套起來。而且，除了這些基礎建設之外，Windows Azure雲端平台更重要的價值，就是減輕應用程式上線所需要的IT 營運成本，這更是沒辦法在公司中模擬的。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;“We wanted a platform-as-a-service solution, not just cloud infrastructure”&lt;/strong&gt; (&lt;a title="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000011637" href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000011637"&gt;http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000011637&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;很多人都會有錯誤的觀念，以為使用虛擬化技術所建構的環境，就是雲端平台(platform)，所以以為自己造一個雲端的環境很容易。事實上，虛擬化技術只是雲端基礎建設(infrastructure) 的一種技術，就好像你今天要開餐廳，透過虛擬化技術，你可以得到的是一個店面的毛胚屋，裡面的水電、瓦斯、裝潢、隔間等，都必須要你自己處理。換句話說，假使你有一手好菜色，在開始開張賺錢之前，你還必須要花很多的心力，才能夠開張營業。&lt;/p&gt;  &lt;p&gt;&lt;img src="data:image/jpeg;base64,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" width="200" height="150" /&gt;&lt;/p&gt;  &lt;p&gt;而Windows Azure提供的是雲端平台，就好像是裝潢好的店面，你只要把材料搬進店哩，餐廳馬上就可以開張作生意；甚至還提供了中央廚房，如果生意好的話，店面可以隨時擴張，也不會斷炊…&lt;/p&gt;  &lt;p&gt;&lt;img src="https://encrypted-tbn2.google.com/images?q=tbn:ANd9GcSxtnf-HZxdHqsN8jprEvYhXfpIttjePP3K2kR9hi9w4zHjriqv" width="222" height="148" /&gt;&lt;/p&gt;  &lt;p&gt;而開餐廳一定需要買店面嗎? 一般說來，如果是好地段的店面的話，買下來當作一種投資，是有增值的可能；但是以機房設備這種東西來說的話，我入行到現在，從來沒聽說有會隨著時間增值的，只有不斷的折舊，不斷的淘汰而已。因此，以租賃代替購買，還有隨著使用量隨時調整租用資源的數量，才是真正可以有效掌握成本的一種做法。&lt;/p&gt;  &lt;p&gt;所以，不要再去想怎樣把Windows Azure搬到公司裡了，趕快想一些新菜色，搬到Windows Azure雲端平台開張做生意吧!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-3116796604388497679?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/3116796604388497679/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=3116796604388497679' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3116796604388497679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3116796604388497679'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2012/01/windows-azure.html' title='把Windows Azure 搬回家?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2421104219094912167</id><published>2012-01-01T23:20:00.001+08:00</published><updated>2012-01-01T23:27:55.481+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>從Windows Azure 雲端平台談Web應用程式執行環境的安全性</title><content type='html'>&lt;p&gt;對於企業或是雲端服務提供廠商來說，如何讓對外營運的網站或是Web應用程式有一個安全又穩定的執行環境，一直是一個很重要的課題。然而對於大部分的公司來說，因為內部缺乏專業的資訊安全服務團隊的關係，因此往往是等到遭受到惡意的攻擊導致服務停止之後，才開始去修補漏洞；而就算是作業系統有推出修補的程式，IT 人員也有可能因為事情太多忘了馬上安裝修補程式，而導致系統出現了安全的空窗期...&lt;/p&gt;  &lt;p&gt;除了作業系統可能會有安全性的漏洞之外，惡意的使用者也可能從網路發動阻絕攻擊(DDOS)來癱瘓你的網站。因此要讓一個Web 應用程式可以對外營運，除了開發之外，有很多的成本都必須花在IT 設備以及網路安全的監控上。重點是 -- 網路上的攻擊手法日新月異，這些投資還是無法保證你擁有一個真正安全的執行環境...&lt;/p&gt;  &lt;p&gt;Windows Azure 雲端平台本身是屬於PaaS的一種，而且通過了ISO 27001的資訊安全認證，因此當你把Web 應用程式部署到Windows Azure 雲端平台之後，剛剛前面描述的這些傳統IT 安全性部分的需求，就由Windows Azure 雲端平台的維運團隊來幫你處理了!! 我們可以從最近的一次安全性更新，來看一下Windows Azure如何幫你維護Web應用程式執行環境的安全性：&lt;/p&gt;  &lt;p&gt;首先，我們可以先從Scott的Blog，了解這次安全性重要更新 (MS11-110)的內容：&lt;a title="http://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx" href="http://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2011/12/28/asp-net-security-update-shipping-thursday-dec-29th.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;而當重要安全性更新發布之際，Windows Azure 的營運團隊也會寄給每個Windows Azure用戶一封標題為：&amp;quot;&lt;/p&gt;  &lt;h3&gt;IMPORTANT NOTICE: Windows Azure updated to address Security Bulletin MS11-100&lt;/h3&gt;  &lt;p&gt;&amp;quot; 的信，內容如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-cWRG9nVMtC4/TwB5lQgNVAI/AAAAAAAAO_c/v6ytaSkpuDY/s1600-h/image%25255B69%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-eOLtRBNUkds/TwB5mGj9QFI/AAAAAAAAO_g/lpzXAyBCXNY/image_thumb%25255B49%25255D.png?imgmax=800" width="644" height="349" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;這一封信就是告訴每一位Windows Azure 雲端平台的用戶，這一個作業系統的重要安全性更新，將會自動套用在用戶所租用的作業系統上。換句話說，只要你將Web 應用程式部署到Windows Azure 雲端平台之後，執行環境的作業系統就會自動地保持在最安全的執行狀態，&lt;strong&gt;&lt;font color="#ff0000"&gt;即便是沒有IT 人員的軟體公司，也可以很低廉的成本就可以有高安全性的Web 應用程式執行環境!!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;當然，若是你擔心自動套用作業系統安全性的更新可能會導致你的程式部分功能發生問題，你也可以透過下面的方式，測試之後再手動地將執行環境上到最新的版本：&lt;/p&gt;  &lt;p&gt;1. 在Windows Azure管理工具當中，首先在託管服務中，建立一個新的預備部屬環境：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-UFLplsZsbpM/TwB5nKGPRtI/AAAAAAAAO_k/R81TBy_MTtc/s1600-h/image%25255B70%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-vxGrAbIQlJE/TwB5oFsbnXI/AAAAAAAAO_o/m600tajOEwE/image_thumb%25255B50%25255D.png?imgmax=800" width="644" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. 設定這次部署的名稱，並且重新上載生產(production)環境所使用的封裝以及設定檔：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-oeNwDr1kcPc/TwB5o6SNgxI/AAAAAAAAO_s/DpugEbYQ8XY/s1600-h/image%25255B71%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-ypgE3Gztf2U/TwB5pgP8OUI/AAAAAAAAO_w/q5CiAY-pPI8/image_thumb%25255B51%25255D.png?imgmax=800" width="644" height="456" /&gt;&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;3. 完成之後，選取上方選單的&amp;quot;設定作業系統&amp;quot;按鈕：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-zWbll1zROKU/TwB5rOUfKlI/AAAAAAAAO_0/kvgXc5tGQ8U/s1600-h/image%25255B72%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-fUvDmIpC2TU/TwB5sOrFDxI/AAAAAAAAO_4/mbHStO-hVt0/image_thumb%25255B52%25255D.png?imgmax=800" width="644" height="133" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4. 從作業系統清單中，根據Windows Azure營運團隊所發布的訊息，選取這次更新之後的作業系統版本(WA-GUEST-OS-2.8_201109-03)：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-Vf1Y5phg6oQ/TwB5tuiVmRI/AAAAAAAAO_8/_rHO6wGoFVo/s1600-h/image%25255B73%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-l31CjbGAVZQ/TwB5vZRZ3_I/AAAAAAAAPAA/vgyKmgspJX8/image_thumb%25255B53%25255D.png?imgmax=800" width="644" height="452" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Windows Azure雲端平台中，目前有兩種作業系統：Windows Azure Guest OS 1.x的是Windows Server 2008，而Windows Azure Guest OS 2.x的則是Windows Server 2008 R2. &lt;strong&gt;&lt;font color="#ff0000"&gt;你可以根據需要選擇需要的作業系統，而不需要另外再付授權的費用&lt;/font&gt;&lt;/strong&gt;。&lt;/p&gt;  &lt;p&gt;5. 完成之後，你就可以利用剛剛建立的預備部署環境，測試安裝了安全性更新之後，你的應用程式是否還是可以正常地執行。&lt;/p&gt;  &lt;p&gt;6. 接下來，只需要按下上方選單的&amp;quot;交換VIP&amp;quot;按鈕：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-GB2PpZaikNM/TwB5wZ_zjHI/AAAAAAAAPAE/I-2X0QukywA/s1600-h/image%25255B74%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-nrVWrUEytBA/TwB5xhvZl_I/AAAAAAAAPAI/UGZVYUx_GWg/image_thumb%25255B54%25255D.png?imgmax=800" width="644" height="298" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;然後下面的視窗會告訴你，接下來生產部屬與預備部署的VIP將會交換。換句話說，測試完成的預備部署環境，就會變成生產環境了!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-Mn2pF-cLJFc/TwB5y1eeX_I/AAAAAAAAPAM/zXPBg60hgyw/s1600-h/image%25255B77%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/--yqzzwtGEPk/TwB5zhNfI5I/AAAAAAAAPAQ/imc_yJ69R88/image_thumb%25255B57%25255D.png?imgmax=800" width="504" height="351" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7. 最後，別忘了將原本的生產環境刪除，否則是會繼續收費的喔!!&lt;/p&gt;  &lt;p&gt;在傳統的IT 的生產環境當中，若是要上安全性的更新，除了可能需要重新建置預備部署環境測試之外，當正式要安裝安全性更新時，往往也需要將生產環境離線，安裝完更新之後再測試，才可以重新上線。這樣的作法不但需要很多IT 的成本，也可能會造成系統的down-time。而透過Windows Azure雲端平台自動化管理的機制，就算是你的生產環境中有100個Web Role的instance，我們也可以很輕鬆的測試系統在上了安全性更新之後的狀態，並且在沒有down-time的環境之下，輕鬆地將系統重新上線在最安全的環境之中!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2421104219094912167?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2421104219094912167/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2421104219094912167' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2421104219094912167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2421104219094912167'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2012/01/windows-azure-web.html' title='從Windows Azure 雲端平台談Web應用程式執行環境的安全性'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-eOLtRBNUkds/TwB5mGj9QFI/AAAAAAAAO_g/lpzXAyBCXNY/s72-c/image_thumb%25255B49%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2958529549316428543</id><published>2011-11-26T17:20:00.001+08:00</published><updated>2011-11-26T17:20:24.005+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>雲端應用程式開發(2) – 建立Web 角色</title><content type='html'>&lt;p&gt;最簡單的雲端應用程式開發，就是從Web角色開始。&lt;/p&gt;  &lt;p&gt;Web角色就是在Windows Azure 雲端平台當中的IIS 7執行環境，而你只需要會開發ASP.NET應用程式，就可以透過相同的開發經驗，將ASP.NET應用程式移植到雲端執行。當然，Window Azure也提供了PHP與JSP等等異質平台所需要的執行環境，因此除了ASP.NET之外，利用PHP或是Java所開發的雲端應用程式，也可以部署到Windows Azure雲端平台來執行：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-CDyzi5gdB1k/TtCuZjBfGQI/AAAAAAAAO7I/x48jEx3PZRU/s1600-h/Windows-Live-Writer_195c89a49e5e_7C02_5_3%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Windows-Live-Writer_195c89a49e5e_7C02_5_3" border="0" alt="Windows-Live-Writer_195c89a49e5e_7C02_5_3" src="http://lh4.ggpht.com/-7NijxTME_hY/TtCudWPyDMI/AAAAAAAAO7Q/h-4CYXCf6BY/Windows-Live-Writer_195c89a49e5e_7C02_5_3_thumb%25255B1%25255D.png?imgmax=800" width="644" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;(圖：Windows Azure提供了異質平台的雲端執行環境)&lt;/p&gt;  &lt;p&gt;這裡我們先以ASP.NET應用程式為主，介紹一下Web角色的基本操作觀念；至於其他平台的部分，會在後面再陸續介紹。首先以系統管理員身分，開啟Visual Studio 2010 開發工具。若是你有安裝Windows Azure SDK的話，在新增專案的時候，就可以從&amp;quot;Cloud&amp;quot;的專案範本當中，找到&amp;quot;Windows Azure Project&amp;quot;的雲端專案範本。選取&amp;quot;Windows Azure Project&amp;quot;雲端專案範本之後，設定專案名稱為&amp;quot;&lt;em&gt;CloudDropbox&lt;/em&gt;&amp;quot; 以及專案儲存的路徑之後，按下&amp;quot;確定&amp;quot;按鈕繼續：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-vo7AGpkvcWQ/TtCugx5pZ_I/AAAAAAAAO7Y/zg7LlfKUBZg/s1600-h/SNAGHTML935e0bd%25255B17%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML935e0bd" border="0" alt="SNAGHTML935e0bd" src="http://lh3.ggpht.com/--4_4EBwllx4/TtCujyfvyyI/AAAAAAAAO7g/Rc1qChOS4vA/SNAGHTML935e0bd_thumb%25255B14%25255D.png?imgmax=800" width="644" height="399" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;然後會出現如下圖的對話方塊。首先先選擇要新增 &amp;quot;ASP.NET Web Role&amp;quot;，然後按下 &lt;a href="http://lh3.ggpht.com/-64dBH2k-ZZU/TtCunNhCclI/AAAAAAAAO7o/t_paOdHmPTI/s1600-h/image%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-8kk70FoTLzo/TtCuqRVsNhI/AAAAAAAAO7w/CmyQzwjU1S8/image_thumb.png?imgmax=800" width="25" height="26" /&gt;&lt;/a&gt;按鈕之後，就可以在Windows&amp;#160; Azure雲端解決方案當中加入一個Web Role角色。接著選取右邊新增的Web角色，按下 &lt;a href="http://lh4.ggpht.com/-WhArvJuIl14/TtCut0Doa-I/AAAAAAAAO74/JcwbtBbnNwY/s1600-h/image%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-LByM7EnckHE/TtCuxAHH3pI/AAAAAAAAO8A/imS3qwlBnAg/image_thumb%25255B1%25255D.png?imgmax=800" width="23" height="20" /&gt;&lt;/a&gt;按鈕之後就可以修改Web角色的名稱。在這裡我們暫時先把這一個Web角色取名為&amp;quot;&lt;em&gt;CloudDropbox_WebRole&lt;/em&gt;&amp;quot;，然後按下&amp;quot;OK&amp;quot;按鈕：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-zK-n2MCI4AQ/TtCuzcPA-cI/AAAAAAAAO8I/OjfGgVZjK_g/s1600-h/SNAGHTML9443aaf%25255B8%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML9443aaf" border="0" alt="SNAGHTML9443aaf" src="http://lh5.ggpht.com/-5J7rtCZqc4g/TtCu2nIaFvI/AAAAAAAAO8Q/ayilVa1TuIA/SNAGHTML9443aaf_thumb%25255B5%25255D.png?imgmax=800" width="643" height="429" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;此時Visual Studio 2010開發工具會開啟CloudDropbox解決方案，裡面會包含有CloudDropbox以及CloudDropbox_WebRole兩個專案：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-AM-nAtJqeVg/TtCu5542TjI/AAAAAAAAO8Y/FZ6m0HZ5M3k/s1600-h/image%25255B22%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-n-HnZxqtTvg/TtCu8q6pxeI/AAAAAAAAO8g/5bV1HUIdhEA/image_thumb%25255B15%25255D.png?imgmax=800" width="267" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;CloudDropbox專案是用來管理所有需要封裝及部署到Windows Azure雲端平台所需要的角色以及設定的專案，是雲端應用程式封裝及部署的單元。而在CloudDropbox專案中，預設的建立Web角色則是會對應到名稱為CloudDropbox_WebRole的ASP.NET專案。目前我們就先用預設專案範本的內容，來練習一下如何在本機開發環境當中測試開發好的雲端應用程式專案。&lt;/p&gt;  &lt;p&gt;因為Windows Azure SDK會在你的開發環境當中安裝本機的模擬環境，因此當Windows Azure專案開發完成之後，你可以直接在Visual Studio 2010開發環境中按下 F5鍵，先在本機的模擬環境當中測試。當按下 F5按鍵之後，首先Visual Studio 2010開發工具會先編譯解決方案，然後會開始準備本機的模擬環境：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-ljbUTVx0_ew/TtCu_89t7HI/AAAAAAAAO8o/qfvVkMz6xEc/s1600-h/SNAGHTML95d8804%25255B8%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML95d8804" border="0" alt="SNAGHTML95d8804" src="http://lh6.ggpht.com/-JzPWykBkL0c/TtCvD6xmq7I/AAAAAAAAO8w/NP_3tjerOyU/SNAGHTML95d8804_thumb%25255B5%25255D.png?imgmax=800" width="654" height="213" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;模擬環境啟動之後，你可以在開發環境作業系統的通知列當中，看到 &lt;a href="http://lh6.ggpht.com/-SMr8zzhqULU/TtCvG6JuxjI/AAAAAAAAO84/lcmvEv7zUWY/s1600-h/image%25255B13%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-odGoggqEHns/TtCvKJ0EtRI/AAAAAAAAO9A/jK0ZR-vh3lw/image_thumb%25255B8%25255D.png?imgmax=800" width="30" height="31" /&gt;&lt;/a&gt;圖示。用滑鼠移到圖示上就會出現提示視窗，顯示本機的計算與儲存單元都已經準備完成：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-iG_5m-BUMh8/TtCvMntRXGI/AAAAAAAAO9I/6HNQtT8qsaA/s1600-h/image%25255B25%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-ysNX-rKcz58/TtCvQUl5_qI/AAAAAAAAO9Q/Ouve2wujJZY/image_thumb%25255B18%25255D.png?imgmax=800" width="280" height="111" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;接著，就跟一般的ASP.NET專案一樣，Visual Studio 2010開發工具會開啟瀏覽器，並且連結到裝載在本機模擬環境當中的雲端應用程式：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-HCkP3VtggpA/TtCvSlKZXKI/AAAAAAAAO9Y/__CdfIdqm9Y/s1600-h/SNAGHTML9638c48%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML9638c48" border="0" alt="SNAGHTML9638c48" src="http://lh5.ggpht.com/--0poesmR9tE/TtCvVvOaqZI/AAAAAAAAO9g/T4_H8tw9WFU/SNAGHTML9638c48_thumb%25255B4%25255D.png?imgmax=800" width="644" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;很簡單吧!! 其實對於ASP.NET開發人員來說，開發雲端應用程式的過程是很類似的，比較不一樣的地方會是在於設計時的一些架構概念以及部署的過程，這些在稍後會再繼續為大家介紹。下一篇文章，我們就要先來申請一個試用的帳號，並且學習如何將開發好雲端應用程式直接部署到Windows Azure雲端平台當中，讓全世界的使用者都可以馬上使用!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2958529549316428543?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2958529549316428543/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2958529549316428543' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2958529549316428543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2958529549316428543'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/11/2-web.html' title='雲端應用程式開發(2) – 建立Web 角色'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-7NijxTME_hY/TtCudWPyDMI/AAAAAAAAO7Q/h-4CYXCf6BY/s72-c/Windows-Live-Writer_195c89a49e5e_7C02_5_3_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-8208709332863131311</id><published>2011-11-23T15:53:00.001+08:00</published><updated>2011-11-23T15:54:49.478+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>雲端應用程式開發(1) - 執行環境概論</title><content type='html'>&lt;p&gt;PaaS (Platform as a Service) 平台最方便的地方在於，平台本身已經設定好了應用程式所需要的執行環境；因此對於開發人員來說，只需要了解 PaaS平台提供了那些支援，就可以在程式中直接使用這些服務，而且在部署的時候不需要另外再透過 IT人員的協助，透過設定的方式就可以調整所需要的執行環境。&lt;/p&gt;  &lt;p&gt;以Windows Azure來說，雲端平台環境預設就提供了下面幾種基本的服務：&lt;/p&gt;  &lt;p&gt;1. 託管服務 (Hosting Service)：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Windows Azure 的託管服務分成幾種不同角色(role)。Web 角色就是在雲端的IIS 7，可以部署並且執行ASP.NET、PHP 等Web應用程式；而Windows 角色則是在雲端上面的Windows服務，你可以將需要常駐執行的程式，透過Windows 角色開發之後部署到Windows Azure當中執行。&lt;/p&gt;    &lt;p&gt;如果執行環境當中，需要比較特別客製化的模組才可以執行的話，Windows Azure也支援VM 映像角色，讓你可以將客製化的執行環境封裝到虛擬機器映像在上再到雲端執行。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. 儲存體服務 (Storage Service)：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;顧名思義，就是用來存放資料的服務。儲存體服務當中可以儲存Table、Blob和Queue等資料，如果有需要的話，也可以mount一個drive出來使用。而所謂的Table資料，並非資料庫當中的表格，而是用來存放程式中的一般非結構化實體(Entity)資料。儲存體服務可以隨時根據需要進行擴充，而且也可以根據程式的需要設定存取的權限。關於儲存體服務的操作方法，會在後面透過實例來介紹。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3. 資料庫服務：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;雲端應用程式運算處理過的結構化資料，像是訂單或是產品資料，則是可以存放在SQL Azure的雲端資料庫當中。而透過Data Sync服務，SQL Azure當中的資料還可以更進一步與其他的SQL Azure實體，或是企業內部的SQL Server進行雙向的資料同步，也可以透過報表服務產生雲端的報表。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;4. Windows Azure AppFabric：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;雲端當中的應用程式執行平台，包含了分散式的快取服務(Caching)、雲端的服務匯流排(Service Bus)和存取控制服務(Access Control Service, ACS)。分散式的快取服務提供可靠而且速度快的暫存資料平台，而服務匯流排則是讓你可以將多個其他的服務，整合到你的服務當中使用。&lt;/p&gt;    &lt;p&gt;存取控制服務提供簡單的方法來驗證及授權使用者存取你的 Web 應用程式和服務，同時可以從程式碼提取驗證和授權的功能。不需使用應用程式所特有的使用者帳戶來實作驗證系統，可以讓 ACS 協調使用者的驗證及大部分授權工作。ACS 整合標準型的身分識別提供者，包含企業目錄 (如 Active Directory) 和 Web 身分識別 (如 Windows Live ID、Google、Yahoo! 和 Facebook)。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;5. 內容傳遞網路(CDN)服務：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;在策略性放置位置快取 Windows Azure Blob 和計算執行個體的靜態內容輸出，以便提供最大頻寬來傳遞內容給使用者。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;6. 虛擬網路服務：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;透過 Windows Azure Connect，可以使用簡單的使用者介面，在組織網路中的電腦或虛擬機器 (VM) 與 Windows Azure 中執行的角色執行個體之間設定 IPsec 保護的連接。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;下面這張堆疊圖，簡單的整理了Windows Azure雲端平台中的服務的架構：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-e0bbkynhJJ0/TsymZR8wMeI/AAAAAAAAO7A/f2VNz7ljCSU/s1600-h/Azure%25255B9%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Azure" border="0" alt="Azure" src="http://lh4.ggpht.com/-Hz2n0q9K-7w/Tsymcxx07xI/AAAAAAAAO7E/B7w4nh0Iamw/Azure_thumb%25255B10%25255D.jpg?imgmax=800" width="644" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;而除了公有雲之外，Windows Azure也可以與企業內部的服務結合，建構混和雲(Hybrid Cloud)服務。如此一來，企業的應用程式就可以分散建立在雲端上立即可以使用的環境中，節省 IT 設備與管理的成本。而對於Windows Azure的架構有了基本的概念之後，下一步就可以來看一下如何開發雲端應用程式。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-8208709332863131311?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/8208709332863131311/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=8208709332863131311' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8208709332863131311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8208709332863131311'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/11/1.html' title='雲端應用程式開發(1) - 執行環境概論'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-Hz2n0q9K-7w/Tsymcxx07xI/AAAAAAAAO7E/B7w4nh0Iamw/s72-c/Azure_thumb%25255B10%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4627561401058350621</id><published>2011-11-19T20:28:00.001+08:00</published><updated>2011-11-19T20:29:10.976+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>雲端應用程式開發(0) - 做個Dropbox有多難?</title><content type='html'>&lt;p&gt;當網際網路從 .com時代邁入 .App時代，你準備好了嗎?&lt;/p&gt;  &lt;p&gt;在 .com的年代，當你想要透過網路賺錢，必須要成立公司，設置機房，架設網站、招募人員... 等等，好像少了什麼? 沒錯，要做這些事情，你必須要有&amp;quot;錢&amp;quot;，而且是&amp;quot;很多很多錢&amp;quot;，才可以完成你的夢想。所以在 .com的年代，如果背後沒有金主或是創投資金挹注的網路公司，通常連創業都會有困難，更別說要營運了...&lt;/p&gt;  &lt;p&gt;而現今的 .App時代，又是另一種局面。在 .App時代中，當你有了一個&amp;quot;可能&amp;quot;可以賺錢的想法之後，你並不需要花大錢去尋找金主，因為在網路上，已經有隨即可用的 PaaS平台，讓你可以透過租用的方式，部署你的服務；而網路上也存在者各種不同的軟體服務市場、市集，讓你的服務可以直接被推送到使用者面前，增加賺錢的機會。更棒的是，如果你的想法夠好，你還可以參加像是微軟的BizSpark計畫(&lt;a title="http://www.microsoft.com/taiwan/bizspark/" href="http://www.microsoft.com/taiwan/bizspark/"&gt;http://www.microsoft.com/taiwan/bizspark/&lt;/a&gt;)，取得更多的免費資源，大大降低了個人創業的門檻....&lt;/p&gt;  &lt;p&gt;也就是因為在.App 時代中，開發人員不需要事先為了建立系統架構(機器、作業系統、防火牆…等等)而傷腦筋，因此你可以在隨時有創意的發想之後，透過Visual Studio 2010開發工具以及你既有的 .NET程式開發技術，就可以快速建立應用程式並且發佈到市集當中。&lt;/p&gt;  &lt;p&gt;你覺得開發個Dropbox的解決方案很難嗎? 或許你會想說：&lt;/p&gt;  &lt;p&gt;&amp;quot;我不懂Cloud Computing，也不懂MapReduce，應該是不行吧??&amp;quot; &lt;/p&gt;  &lt;p&gt;其實，開發雲端應用程式，把你的創意變成可以賺錢的系統，距離並沒有這樣難。一開始，你需要先準備下面的一些傢私：&lt;/p&gt;  &lt;p&gt;1. Visual Studio 2010 開發工具：無論是開發行動裝置端的程式，或是雲端的服務，都可以透過這一個工具搞定。&lt;/p&gt;  &lt;p&gt;2. IIS 7：主要是程式開發完成之後，提供本機測試的環境。&lt;/p&gt;  &lt;p&gt;3. Windows Azure SDK for .NET - November 2011(&lt;a title="Get the SDK" href="http://www.microsoft.com/web/gallery/install.aspx?appid=WindowsAzureToolsVS2010?"&gt;Get the SDK&lt;/a&gt;)：最新的Windows Azure SDK，安裝好之後就有模擬器可以測試開發好的雲端程式。&lt;/p&gt;  &lt;p&gt;環境建立好之後，下一步就可以開始開發你的Dropbox解決方案! 別擔心，只要你會開發ASP.NET應用程式，跟著接下來這一系列的教學，搭配Windows Azure雲端平台，不用建立自己的機房，不用懂Cloud Computing，你也可以開始在雲端大顯身手，用力擁抱 .App時代!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4627561401058350621?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4627561401058350621/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4627561401058350621' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4627561401058350621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4627561401058350621'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/11/blog-post.html' title='雲端應用程式開發(0) - 做個Dropbox有多難?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-5622637289545882392</id><published>2011-11-18T00:59:00.001+08:00</published><updated>2011-11-18T00:59:52.069+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>你是Software Engineer，還是System Engineer?</title><content type='html'>&lt;p&gt;Web 應用程式發展到目前以來，儼然已經成為一門顯學，百花齊放，各式各樣的解決方案都有；而加入了行動裝置之後，開發架構與執行環境又更顯得複雜。然而大家捫心自問，這些Web 應用程式，測試過之後，每次都能順利上線嗎? &lt;/p&gt;  &lt;p&gt;在傳統軟體的分工當中，開發人員負責開發應用程式、測試、打包，而IT人員協助建置環境、部署以及維運。然而隨著Web應用程式所需要的執行環境越來越複雜，IT 人員維運的成本也就越來越高；如果再加上各種不同新平台模組的設定，IT 人員幾乎是無法掌握Web應用程式上線之後的狀況，於是乎大大小小的問題，都要找開發人員回來處理，搞得開發人員既要開發新的功能，又要三不五時看看是不是因為什麼設定被改掉，導致系統服務發生問題。惡性循環的結果，最後就是每個開發人員都必須要校長兼撞鐘，變成 &amp;quot;Software + System Engineer&amp;quot;….&lt;/p&gt;  &lt;p&gt;若是任由故事繼續這樣發展下去的話，我看以後真的是會找不到開發人員了。幸好在雲端的解決方案當中，可以把維運的工作，交給雲端平台(Platform)的提供者，而開發人員只需要著重在系統程式開發的方面就可以了。省卻了IT 環境的建置與維運的工作之後，開發人員的解決方案可以更快的部署上線；這對於提供SaaS服務或是開發行動裝置解決方案的雲端服務廠商來說，更是大大節省營運成本的一盞明燈!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-I0LlTszIrAI/TsU9gxWJckI/AAAAAAAAO6g/XtAepiQTB0U/s1600-h/Cloud%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Cloud" border="0" alt="Cloud" src="http://lh6.ggpht.com/-d-45SdUmCtA/TsU9hnX2vcI/AAAAAAAAO6k/mAaf_e-ygjM/Cloud_thumb%25255B1%25255D.jpg?imgmax=800" width="331" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;但是大家需要注意的是，有很多團隊對於雲端平台都有錯誤的觀念，以為只要把執行環境直接做成虛擬機器之後，找個代管商的機器丟上去就可以了。請參考上面的這張圖，若是&lt;strong&gt;&lt;font color="#ff0000"&gt;你&lt;/font&gt;&lt;/strong&gt;將執行環境製作成虛擬機器，或是使用Amazon這一類 IaaS 所提供的服務， 表示&lt;strong&gt;&lt;font color="#ff0000"&gt;你&lt;/font&gt;&lt;/strong&gt;還是必須要從安裝、升級作業系統，設定防火牆、防毒防駭、設定網路負載平衡...等等開始製作你的環境；而這些環境將來如果需要升級與調整，或是虛擬機器需要備份，也比需要透過&lt;strong&gt;&lt;font color="#ff0000"&gt;你&lt;/font&gt;&lt;/strong&gt;或是IT 人員處理(&lt;strong&gt;&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;通常會是&lt;/font&gt;你&lt;/font&gt;&lt;/strong&gt;)才可以完成。如此一來，&lt;strong&gt;&lt;font color="#ff0000"&gt;你&lt;/font&gt;&lt;/strong&gt;節省不了多少系統營運的成本，卻又把環境搞得更複雜…&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;雲端時代的開發人員，請記得要捨棄掉IT 時代的思維，專注在建立創新服務跟收錢上就好!&lt;/em&gt;&lt;/strong&gt; 因此在建立SaaS服務或是行動裝置解決方案的後端服務時，PaaS會是比較好的解決方案。PaaS 除了可以幫你完成前一段文章中所有用紅色標記的 -- &amp;quot;&lt;font color="#ff0000"&gt;&lt;strong&gt;你&lt;/strong&gt;&lt;/font&gt;&amp;quot; -- 的工作，又可以在無需自己建置機房的狀況之下，將服務快速的部署到全世界的任何地方。如此一來，Software Engineer才有可能有更多時間，創造出更多賺錢的機會!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-5622637289545882392?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/5622637289545882392/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=5622637289545882392' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5622637289545882392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5622637289545882392'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/11/web-web-itwebit-it-web-system-engineer.html' title='你是Software Engineer，還是System Engineer?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-d-45SdUmCtA/TsU9hnX2vcI/AAAAAAAAO6k/mAaf_e-ygjM/s72-c/Cloud_thumb%25255B1%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-5982373147788783145</id><published>2011-08-29T01:04:00.001+08:00</published><updated>2011-08-29T01:04:27.761+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='IT Pro要你知道的事'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>你給我的雲不是雲?</title><content type='html'>&lt;p&gt;前幾天，和日本來的同事聚餐。席間，日本IT 的主管知道我熟Web開發技術，問了我一個問題：&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;我們只有一個人熟悉IIS，但是有很多Web Application需要部署跟維護，有沒有甚麼好的做法 ?&lt;/em&gt; &amp;quot; &lt;/p&gt;  &lt;p&gt;他很擔心哪天這一個人離職之後，所有的系統就沒有人可以維護了。&lt;/p&gt;  &lt;p&gt;目前大部分所謂的&amp;quot;雲端運算&amp;quot;的架構當中，大都強調透過虛擬化技術可以快速配置所需要的環境，並且善用伺服器的硬體資源。但隨著雲端運算需求的日益增加，Web相關技術以及IIS平台也都隨著加入了很多新的功能；換句話說，建構一個Web Application所需要的執行環境，已經不是單純的增加虛擬機器可以解決的問題，像是驗證、授權，URL重寫、甚至是快取及工作流程的設定，很多也都不是傳統的IT人員可以馬上掌握的。&lt;/p&gt;  &lt;p&gt;這個問題很久之前微軟的吳典璋經理就已經跟我討論過，為了縮短IT與開發人員溝通的gap，因此特別在今年的MSDN講座與Techdays 2011中，加入了介紹ASP.NET 4以及IIS 7+Windows Server AppFabric的場次，希望讓大家可以對於如何使用微軟的新技術，在現有的企業環境中建立私有雲，讓開發人員所建立的雲端應用程式可以在上面執行有共同的概念。雖然是這樣，但建構私有雲少不了的還是建置私有雲實體環境以及維運所需要的成本。附圖是一般企業的IT投資與實際運用的參考曲線圖：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-LGZxxY0A_us/Tlp1Fz-bgZI/AAAAAAAAO3Q/uUZ6snfYE2s/s1600-h/Windows%252520Azure%252520Platform%252520Overview%25255B3%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Windows Azure Platform Overview" border="0" alt="Windows Azure Platform Overview" src="http://lh5.ggpht.com/-vSfkw4Se1_I/Tlp1GvOEJoI/AAAAAAAAO3U/vlBpetRrYrU/Windows%252520Azure%252520Platform%252520Overview_thumb%25255B1%25255D.jpg?imgmax=800" width="644" height="364" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;回到一開始的問題，微軟的解決方案中，Windows Azure就是這個問題的好答案。透過Windows Azure所提供的平台，無論是Web Application或是Web Services (WCF Services)，都可以在開發完成之後直接部署到上面執行；而IT人員也可以直接地透過管理工具隨時根據維運的需求，動態調整所需要的資源，節省成本支出。相較於一般的虛擬化技術來說，Windows Azure本身就是一個雲端的執行環境，因此IT人員並不需要花時間在為每一個應用程式管理設定 -- 因為程式需要的設定，都可以由開發人員直接包在package中；而開發人員更不用擔心應用程式會因為IT人員所提供的VM當中，忘了安裝某些服務或是設定，而導致應用程式無法上線執行...&lt;/p&gt;  &lt;p&gt;當然，Windows Azure也提供了可以與現有企業私有雲的解決方案，透過Windows Azure Connect建立混合雲環境之後，可以很容易地將企業的系統直接延伸到雲端。有機會的話，再來分享手邊顧問案的使用經驗和其他心得。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-5982373147788783145?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/5982373147788783145/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=5982373147788783145' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5982373147788783145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5982373147788783145'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/08/blog-post.html' title='你給我的雲不是雲?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-vSfkw4Se1_I/Tlp1GvOEJoI/AAAAAAAAO3U/vlBpetRrYrU/s72-c/Windows%252520Azure%252520Platform%252520Overview_thumb%25255B1%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1601350462642412565</id><published>2011-07-15T22:42:00.001+08:00</published><updated>2011-07-15T22:42:46.542+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>無痛開發日 - 使用Visual Studio 2010</title><content type='html'>&lt;p&gt;今天的無痛開發日，早上是由保哥分享Visual Studio 2010的開發經驗，下午由我介紹 IIS 7在目前SOA架構中所扮演的角色，以及Windows Server AppFabric的開發經驗。有興趣的朋友，可以到下面的網址下載我今天上課的講義：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://docs.com/DBAE" target="_blank"&gt;開發人員需要懂的 IIS 7秘技&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://docs.com/DBAF" target="_blank"&gt;利用IIS部署與維護SOA應用程式的技巧&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;另外，如果你聽完今天的課程，對於WCF與Windows Server AppFabric有興趣的話，在九月份的TechDays 2011大會中，會有專門的主題進行分享。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1601350462642412565?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1601350462642412565/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1601350462642412565' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1601350462642412565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1601350462642412565'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/07/visual-studio-2010.html' title='無痛開發日 - 使用Visual Studio 2010'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1151741507899036247</id><published>2011-07-02T18:09:00.001+08:00</published><updated>2011-07-02T23:02:02.493+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='行動裝置應用程式'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>使用VS 2010開發工具建立Android應用程式 - 初體驗</title><content type='html'>&lt;p&gt;如果你接觸.NET Framework有段期間，應該或多或少聽過 Mono -- 一個由Novell所主導的一個Open Source計畫，目標是建立可以讓.NET應用程式跨平台執行的環境(&lt;a title="http://www.mono-project.com/Main_Page" href="http://www.mono-project.com/Main_Page"&gt;http://www.mono-project.com/Main_Page&lt;/a&gt;). 而其中的Moonlight計畫目標，則是針對微軟Silverlight技術目前無法支援Linux作業系統，建立一個可以供Silverlight應用程式執行的環境(&lt;a title="http://www.mono-project.com/Moonlight" href="http://www.mono-project.com/Moonlight"&gt;http://www.mono-project.com/Moonlight&lt;/a&gt;)。而針對行動裝置應用程式的需求，Mono則是提供了MonoTouch的開發環境，讓.NET的程式開發人員可以透過C#程式語言以及相關的函式庫，建立Android、iPhone、iPad以及iPod Touch上的應用程式。而今天要介紹的就是Android平台的應用程式開發環境 – Mono for Android(&lt;a title="http://mono-android.net/" href="http://mono-android.net/"&gt;http://mono-android.net/&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Mono for Android 支援Visual Studio 2010 開發工具，因此C#開發人員可以在既有熟悉的開發環境中，開發、測試與部署Android應用程式。Mono for Android也提供了許多不同的版本(&lt;a title="http://mono-android.net/Store" href="http://mono-android.net/Store"&gt;http://mono-android.net/Store&lt;/a&gt;)，針對企業用戶的需求，Mono for Android也可以將開發好的Android應用程式直接部署到員工的手機上執行。而使用試用版本開發好的Android應用程式，則是可以直接部署到Android SDK當中的模擬器執行；如果你花399美金購買專業版，就可以將使用VS 2010開發好的Android應用程式部署到最多100隻手機上執行。&lt;/p&gt;  &lt;p&gt;要使用VS 2010開發工具撰寫Android應用程式之前，首先要先下載Mono for Android以及相關的開發環境，參考下面的步驟：(完整的安裝指南請參考：&lt;a title="http://mono-android.net/Installation/Visual_Studio" href="http://mono-android.net/Installation/Visual_Studio"&gt;http://mono-android.net/Installation/Visual_Studio&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;1. 安裝32位元版Java開發套件(JDK)：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;從這下載：&lt;a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html"&gt;http://www.oracle.com/technetwork/java/javase/downloads/index.html&lt;/a&gt;，即使你的作業系統是64位元版，也請安裝32位元版的JDK。請注意，只安裝Java執行環境(JRE)是不行的喔!!&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. 安裝Android SDK&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;從這下載：&lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;。下載安裝之後，以系統管理員身分執行SDK Manager，SDK Manager會自動下載並安裝開發Android應用程式的環境所需要的套件。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-vz4NS9XW8FM/Tg7uKB--YPI/AAAAAAAAOvw/9VtGmFGMAOo/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-E3JLyOzHUIw/Tg7uK6_mI7I/AAAAAAAAOv0/gGqKTX-0cuQ/image_thumb%25255B1%25255D.png?imgmax=800" width="644" height="371" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3. 設定模擬器環境：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;接著要建立Android應用程式開發完成之後，測試應用成試所需要的模擬器環境。首先在SDK Manager當中選取 &amp;quot;Virtual devices&amp;quot;，然後按下 &amp;quot;New&amp;quot;按鈕：&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-hupDgLivDKI/Tg7uLv54ZOI/AAAAAAAAOv4/u8Loe6w-Ngs/s1600-h/image%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-KkIHHO0ZtBg/Tg7uMayqB7I/AAAAAAAAOv8/BC_WMQKepoc/image_thumb%25255B3%25255D.png?imgmax=800" width="644" height="236" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;輸入模擬器的名稱、要模擬的目標版本等設定之後，按下&amp;quot;Create AVD&amp;quot; 按鈕：&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-QNNj5-DGbEM/Tg7uM4u71BI/AAAAAAAAOwA/FpRmsBOOCa0/s1600-h/image%25255B16%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-442uF_clZ3w/Tg7uNkcjXsI/AAAAAAAAOwE/ObQ0IWV0r9E/image_thumb%25255B8%25255D.png?imgmax=800" width="347" height="535" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;接著會出現下面的對話方塊，按下&amp;quot;OK&amp;quot;就完成了!&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-7KqxTOd5rfw/Tg7uOUnsmbI/AAAAAAAAOwI/JTBkJH0Gsgk/s1600-h/image%25255B22%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-RlZiyzrp5gM/Tg7uO4RGdcI/AAAAAAAAOwM/XnQO08ePz7o/image_thumb%25255B12%25255D.png?imgmax=800" width="491" height="205" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;建立好模擬器環境之後，可以不需要馬上啟動，但是我建議各位可以先啟動看看。在預設狀況下，當Android啟動模擬器時，預設是到使用者目錄路徑下的 &amp;quot;.Android&amp;quot; 子目錄(例如：C:\Users\john_chang\.android)下讀取設定檔；若是你的使用者目錄不在Windows預設的C槽目錄下，那就必須在C槽的使用者目錄下建立一個&amp;quot;.Android&amp;quot; 的目錄捷徑，指向實際使用者目錄路徑下的 &amp;quot;.Android&amp;quot; 子目錄位置(例如：F:\Users\john_chang\.android)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;4. 安裝 Mono for Android 的VS 2010 套件&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;從這裡下載試用版：&lt;a href="http://mono-android.net/DownloadTrial"&gt;http://mono-android.net/DownloadTrial&lt;/a&gt;。安裝之前請記得先關閉所有開啟的VS 2010開發工具。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;安裝完成之後，重新啟動VS 2010，新增專案的時候，就會出現&amp;quot;Mono for Android&amp;quot;的新範本類別，並且預設有三個新的範本可以使用：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-RnRvVypdZ9M/Tg8ywEQrGII/AAAAAAAAOxA/-NdmuKlXF60/s1600-h/image%25255B13%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-cSmctMx-aJs/Tg8yw3R2xnI/AAAAAAAAOxE/OEsQgaBCJ4w/image_thumb%25255B9%25255D.png?imgmax=800" width="644" height="222" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;直接選取&amp;quot;Mono for Android Application&amp;quot;，然後將專案的名稱改成&amp;quot;HelloWorld&amp;quot;，按下OK，就可以建立你的第一個Android應用程式專案。在Android專案中，Main.axml是用來定義主表單上面的使用者操作介面，Strings.xml相當於.NET專案中的資源檔，而程式則是定義在Activity1.cs的程式擋中。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-WsjLrCqV4RA/Tg8uCnG-CCI/AAAAAAAAOwY/haygFn10Fyw/s1600-h/image%25255B30%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-j7X_2UCysDg/Tg8uDO9VAsI/AAAAAAAAOwc/t-IJA5O98L0/image_thumb%25255B16%25255D.png?imgmax=800" width="313" height="393" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;雖然專案中這些檔案的架構與.NET專案不同，但若是你有接觸過WPF或是Silverlight專案的話，相信對於這種 Applicetion = Markup + Code的寫法不陌生。開啟 Main.axml檔案，在HelloWorld應用程式中，預設已經加入一個 &amp;quot;MyButton&amp;quot;：&lt;/p&gt;    &lt;table border="1" cellspacing="0" cellpadding="2" width="600"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="600"&gt;           &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;              &lt;br /&gt;&amp;lt;LinearLayout xmlns:android=&amp;quot;&lt;a href="http://schemas.android.com/apk/res/android&amp;quot;"&gt;http://schemas.android.com/apk/res/android&amp;quot;&lt;/a&gt;               &lt;br /&gt;android:orientation=&amp;quot;vertical&amp;quot;               &lt;br /&gt;android:layout_width=&amp;quot;fill_parent&amp;quot;               &lt;br /&gt;android:layout_height=&amp;quot;fill_parent&amp;quot;               &lt;br /&gt;&amp;gt;               &lt;br /&gt;&lt;strong&gt;&amp;lt;Button                &lt;br /&gt;android:id=&amp;quot;@+id/MyButton&amp;quot;                 &lt;br /&gt;android:layout_width=&amp;quot;fill_parent&amp;quot;                 &lt;br /&gt;android:layout_height=&amp;quot;wrap_content&amp;quot;                 &lt;br /&gt;android:text=&amp;quot;@string/Hello&amp;quot;                 &lt;br /&gt;/&amp;gt;&lt;/strong&gt;               &lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;p&gt;開啟Activity1.cs程式檔，當MyButton被按下去的時候，程式中計數器的值會加一，同時按鈕上會顯示總共被按過幾次：&lt;/p&gt;    &lt;table border="1" cellspacing="0" cellpadding="2" width="600"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="600"&gt;           &lt;p&gt;Button button = FindViewById&amp;lt;Button&amp;gt;(Resource.Id.MyButton);&lt;/p&gt;            &lt;p&gt;button.Click += delegate { button.Text = string.Format(&amp;quot;{0} clicks!&amp;quot;, count++); }; &lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;p&gt;最後開啟Strings.xml檔案，根據Main.axml檔案中的設定，找到表示表單中按紐文字設定的標籤，可以直接將按鈕上的文字換成你想要的值：&lt;/p&gt;    &lt;table border="1" cellspacing="0" cellpadding="2" width="600"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="600"&gt;           &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;              &lt;br /&gt;&amp;lt;resources&amp;gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;string name=&amp;quot;Hello&amp;quot;&amp;gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;請按我!&lt;/font&gt;&lt;/strong&gt;&amp;lt;/string&amp;gt;               &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;string name=&amp;quot;ApplicationName&amp;quot;&amp;gt;HelloWorld&amp;lt;/string&amp;gt;               &lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;    &lt;p&gt;詳細的程式寫法就先不介紹了，完成之後按下 F5鍵，就可以執行HelloWorld應用程式。程式編譯完成之後，會彈出一個對話方塊，讓你選擇要將程式部署到哪裡測試。因為目前使用的是測試版，所以選取 &amp;quot;Start emulator image&amp;quot;，啟動Android模擬器：&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-_rFcbC_BodY/Tg8uDmAi1hI/AAAAAAAAOwg/OeDUt511EbY/s1600-h/image%25255B34%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-Q3Lr6h1NI0Q/Tg8uEUuIllI/AAAAAAAAOwk/-Wy5tQXsKdM/image_thumb%25255B18%25255D.png?imgmax=800" width="460" height="281" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;接著選取之前建立的模擬器名稱，按下OK鍵，Andorid模擬器就會啟動：&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-ePC8H1EzyH4/Tg8uE3v0swI/AAAAAAAAOwo/ainuv_6SSX0/s1600-h/image%25255B38%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-r_O9i1PXk9g/Tg8uFqhGpRI/AAAAAAAAOws/qj1227kYaPI/image_thumb%25255B20%25255D.png?imgmax=800" width="459" height="280" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;啟動完成之後，在之前的 &amp;quot;Select Device&amp;quot;對話方塊中，再按下 OK鍵，VS 2010就會開始將Android應用程式部署到模擬器上。按下應用程式主表單中的按鈕，就會顯示總共按過多少次。程式的執行結果如下：&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-O4f_VIKqnlQ/Tg8xWExFTlI/AAAAAAAAOw4/zjjCebAIzQQ/s1600-h/image%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-FVQX8fTXH_I/Tg8xXObtPZI/AAAAAAAAOw8/_YdAd6l4DHk/image_thumb%25255B4%25255D.png?imgmax=800" width="644" height="458" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1151741507899036247?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1151741507899036247/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1151741507899036247' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1151741507899036247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1151741507899036247'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/07/vs-2010android.html' title='使用VS 2010開發工具建立Android應用程式 - 初體驗'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-E3JLyOzHUIw/Tg7uK6_mI7I/AAAAAAAAOv0/gGqKTX-0cuQ/s72-c/image_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7566879573996842554</id><published>2011-05-07T00:15:00.001+08:00</published><updated>2011-05-07T00:36:24.199+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Silverlight 4 企業級雲端應用程式實例</title><content type='html'>&lt;p&gt;今天快下班前，有一位朋友問我，有沒有WPF的參考資料，他們想要用WPF來開發視窗應用程式。&lt;/p&gt;  &lt;p&gt;對於企業來說，大部分的視窗應用程式的功能，都是連結到資料庫處理資料，或是呈現/列印商業用報表為主。如果是這樣的需求的話，通常我會建議不需要使用WPF技術，改為開發Silverlight應用程式會更好。&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Silverlight應用程式不是跟Flash一樣，是在網頁裡面執行的嗎 ?”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;錯!! 其實兩年前我在Tech Days 2009大會上，就曾經介紹過Silverlight 3的於瀏覽器外執行(Out-Of-Browser, OOB) 的功能 -- 讓Silverlight應用程式除了可以嵌入網頁中執行之外，更可以直接安裝在使用者的桌面上，當成一般的視窗應用程式執行!!! 使用Silverlight技術開發在使用者電腦中執行的應用程式，有下面幾個好處：&lt;/p&gt;  &lt;p&gt;1. 跨平台：&lt;/p&gt;  &lt;p&gt;&lt;u&gt;使用WPF技術所開發的視窗應用程式，只能執行在有安裝.NET Framework的機器上&lt;/u&gt;；而&lt;strong&gt;&lt;font color="#ff0000"&gt;Silverlight應用程式，則可以透過瀏覽器，直接安裝在所有支援Silverlight的作業系統上&lt;/font&gt;&lt;/strong&gt;。除了Windows作業系統之外，Mac與Linux上面目前也都可以安裝執行Silverlight應用程式到桌面上執行(Linux透過Moonlight 4，目前支援大部分Silverlight 3與Silverlight 4的功能)。&lt;/p&gt;  &lt;p&gt;2. 自動更新：&lt;/p&gt;  &lt;p&gt; 大部分的企業會選擇開發Web應用程式的其中一個原因，就是更新程式容易。而對於Silverlight應用程式來說，當有新版程式部署到企業伺服器上時，程式中可以設定自動更新，讓使用者的桌上執行的Silverlight應用程式可以永遠保持最新的版本。以POS或是ERP系統來說，當程式上新版本時，就不需要再為每台機器部署更新程式。&lt;/p&gt;  &lt;p&gt;3. 穩定、高效能的執行環境：&lt;/p&gt;  &lt;p&gt;企業級的Web應用程式目前會在前端執行大量的JavaScript，雖然目前主流的瀏覽器都提供了高效能的Script引擎，但是程式越複雜，瀏覽器所消耗的資源也就越多。Silverlight應用程式在桌面上執行時，因為執行的是編譯過的程式，再加上CLR的加持，因此相較於Web應用程式來說，可以讓複雜的程式跑得更穩定，執行速度更快。&lt;/p&gt;  &lt;p&gt;4. 縮短開發與除錯時間&lt;/p&gt;  &lt;p&gt;這我就不贅述了，Silverlight應用程式相較於ASP.NET或是AJAX技術來說，是真正的MVC架構，無論是開發或是除錯都很方便。&lt;/p&gt;  &lt;p&gt;為了讓大家了解使用Silverlight技術開發企業級應用程式、甚至是雲端應用程式的好處，我把去年微軟MIX 10大會其中的一個範例部署到Windows Azure上，讓大家實際體驗看看。下面是操作的步驟：&lt;/p&gt;  &lt;p&gt;1. 首先，請使用瀏覽器開啟 &lt;a title="http://contoso.cloudapp.net/" href="http://contoso.cloudapp.net/"&gt;http://contoso.cloudapp.net/&lt;/a&gt;，你會看到如下圖的網路書店，這個是一個嵌入到網頁中的Silverlight應用程式，你可以切換不同的書店檢視員工的資料：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TcQecC_AQ8I/AAAAAAAAOtY/7CldDwGFYBc/s1600-h/image%5B41%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TcQec8TWA3I/AAAAAAAAOtc/V8gKbkP4b3g/image_thumb%5B28%5D.png?imgmax=800" width="644" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. 在瀏覽器中按下滑鼠右鍵，在快捷選單中會出現一個 &amp;quot;將John's Demo App安裝到此電腦...&amp;quot; 的項目(下圖紅框處)。選取 &amp;quot;將John's Demo App安裝到此電腦...&amp;quot; ，就可以準備將Silverlight應用程式安裝到桌面執行(很簡單吧!!)：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TcQedqSDETI/AAAAAAAAOtg/cyRodOSYuH0/s1600-h/image%5B44%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TcQeeoHLETI/AAAAAAAAOtk/ChfL928Xn2E/image_thumb%5B31%5D.png?imgmax=800" width="644" height="429" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. 接下來的對話方塊會問你，要將Silverlight應用程式的捷徑安裝到何處，你可以選取 &amp;quot;開始功能表&amp;quot; 或是 &amp;quot;桌面&amp;quot;，然後按下 &amp;quot;確定&amp;quot; 按鈕：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TcQefThH01I/AAAAAAAAOto/rBy8ONgBCY8/s1600-h/image%5B49%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TcQegCm91II/AAAAAAAAOts/gVAQQ8_ixjg/image_thumb%5B36%5D.png?imgmax=800" width="428" height="199" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4. 完成之後Silverlight應用程式就會馬上安裝到你的電腦中，同時開啟執行。在這一個範例中，因為我有加入檢查版本的程式，所以當Silverlight應用程式啟動之後，就會顯示檢查的結果：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TcQeg5UrBAI/AAAAAAAAOtw/MnjwmLc-i0I/s1600-h/image%5B53%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TcQeh3JfGAI/AAAAAAAAOt0/6YKLcNbdnOc/image_thumb%5B40%5D.png?imgmax=800" width="563" height="410" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;按下 &amp;quot;確定&amp;quot; 關閉對話方塊之後，Silverlight應用程式就會從桌面上執行：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TcQei5RgZWI/AAAAAAAAOt4/rQiP99hW_yg/s1600-h/image%5B56%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TcQej5ghFII/AAAAAAAAOt8/hoX5SS0EKaM/image_thumb%5B43%5D.png?imgmax=800" width="644" height="369" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5. 關閉網頁與Silverlight應用程式。在桌面上或是開始功能表中，你可以找到 &amp;quot;John’s Demo App&amp;quot; 的捷徑，下次要啟動Silverlight應用程式的話，直接開啟這一個捷徑就可以了!!&lt;/p&gt;          &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TcQeknjRA0I/AAAAAAAAOtA/pACb34krKTs/s1600-h/image%5B25%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TcQelQxd33I/AAAAAAAAOtE/P13CGka79_M/image_thumb%5B16%5D.png?imgmax=800" width="122" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;6. 你也可以隨時從控制台的 &amp;quot;解除安裝或變更程式&amp;quot; 當中，移除安裝好的Silverlight應用程式：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TcQemGYbBZI/AAAAAAAAOuA/95-YgT7tPPo/s1600-h/image%5B59%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TcQemynTTYI/AAAAAAAAOuE/Mjhz4ivsiO8/image_thumb%5B46%5D.png?imgmax=800" width="536" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;或是在Silverlight應用程式啟動時，按下滑鼠右鍵，選取 &amp;quot;移除此應用程式&amp;quot; 即可。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TcQenpx3TCI/AAAAAAAAOuI/eWWy4QqCxZ4/s1600-h/image%5B62%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TcQeorLKbQI/AAAAAAAAOuM/OSE6ZgFHeYY/image_thumb%5B49%5D.png?imgmax=800" width="644" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;當然，使用Silverlight開發視窗應用程式，也不是全然沒有限制，若是需要經常存取本機作業系統元件，像是呼叫Win32 API的應用程式，目前就不適合用Silverlight技術開發。但是以目前企業級應用程式的情境來說，只要是Web應用程式可以做到的，Silverlight應用程式就可以做到 -- 而且使用者還可以直接安裝到桌面上執行，省去開啟瀏覽器載入網頁的動作。&lt;/p&gt;  &lt;p&gt;目前的Silverlight應用程式已經可以存取視訊鏡頭、麥克風、印表機等本機資源，在下一版的Silverlight 5當中，Silverlight的執行環境會開放更多與作業系統互動的功能，讓你開發好的Silverlight應用程式除了可以是Web應用程式之外，更可以是使用者每天可以從雲端安裝到桌面上快速執行的視窗應用程式!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7566879573996842554?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7566879573996842554/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7566879573996842554' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7566879573996842554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7566879573996842554'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/05/silverlight-4.html' title='Silverlight 4 企業級雲端應用程式實例'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/TcQec8TWA3I/AAAAAAAAOtc/V8gKbkP4b3g/s72-c/image_thumb%5B28%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1515799824028660954</id><published>2011-04-28T17:54:00.001+08:00</published><updated>2011-04-28T17:54:01.754+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office 365'/><title type='text'>Office 365 Beta 初窺(1) -- 啟用</title><content type='html'>&lt;p&gt;Windows Azure 是微軟所建立的雲端平台，而Office 365 (&lt;a title="http://www.microsoft.com/zh-hk/office365/online-software.aspx" href="http://www.microsoft.com/zh-hk/office365/online-software.aspx"&gt;http://www.microsoft.com/zh-hk/office365/online-software.aspx&lt;/a&gt;)，則是微軟所提供的雲端辦公室解決方案。就在最近，Office 365 Beta版正式可以申請帳號進行測試，雖然台灣目前不在提供Beta版測試的國家中，但是若是你有美國的公司地址的話，還是可以申請測試帳號試用Beta版。(香港也是有提供繁體中文Beta版測試的國家，但是為了避免有些專有名詞不同所造成的混淆，這篇文章還是先用英文版介紹)&lt;/p&gt;  &lt;p&gt;這次我所申請的是Office 365 方案 P1，也就是針對25人以內的中小企業所提供的解決方案，裡面包含了電子郵件及行事曆(Exchange Online)、Office Web App、網站與協同作業、以及企業即時通訊(Lync)的功能。詳細的方案內容大家可以參考：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/zh-hk/office365/small-business/beta.aspx" target="_blank"&gt;Microsoft Office 365 (方案 P1) Beta 訂閱服務&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/zh-hk/office365/enterprise/subscription-plans.aspx" target="_blank"&gt;Microsoft Office 365 為企業提供四種計劃&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;啟用Office 365的步驟相當的簡單，當你試用Beta版的申請通過之後，微軟會寄一封信給你，點選信件中的連結，就會進入到下面的啟用頁面：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/Tbk4n6WuwvI/AAAAAAAAOrU/SQaHdzF6O1M/s1600-h/image%5B41%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/Tbk4pGS0vNI/AAAAAAAAOrY/5hGmrjPcTGw/image_thumb%5B23%5D.png?imgmax=800" width="644" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;因為目前Office 365還是試用版，所以&amp;quot;Country or region&amp;quot;欄位中雖然有台灣，但實際上目前並不可以選。填好了必要的註冊資訊以及你公司所要使用的網域名稱之後，下一步就進行帳號啟用的動作：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/Tbk4qT5ugmI/AAAAAAAAOrc/VazGbyH-yxA/s1600-h/image%5B45%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/Tbk4sKFOjmI/AAAAAAAAOrg/Lw2VtXH6dbo/image_thumb%5B27%5D.png?imgmax=800" width="644" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;啟用完成之後的畫面如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/Tbk4t5Cs3cI/AAAAAAAAOrk/e3osi42EYbU/s1600-h/image%5B48%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/Tbk4wZQ04rI/AAAAAAAAOro/8q6IvGDnhH4/image_thumb%5B30%5D.png?imgmax=800" width="644" height="398" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;這次先試試Outlook Web App的功能，先把操作介面跟時區設為台灣：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/Tbk4yrtSvbI/AAAAAAAAOrs/fDLFKvoO7M0/s1600-h/image%5B52%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/Tbk41RKs-xI/AAAAAAAAOrw/wla5C7efmKI/image_thumb%5B34%5D.png?imgmax=800" width="458" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;進去之後的操作介面，預設已經跟即時通訊軟體整合，所以在右上角會顯示連線狀態：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/Tbk43L4TAJI/AAAAAAAAOr0/vttv72m-ARc/s1600-h/image%5B55%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/Tbk46NuSS7I/AAAAAAAAOr4/eXqLBCpg888/image_thumb%5B37%5D.png?imgmax=800" width="644" height="389" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;每個使用者都可以自己調整Outlook Web App所需要的設定，或是跟其他的帳號整合在一起：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/Tbk47_SxhEI/AAAAAAAAOr8/XaspWcxhTbk/s1600-h/image%5B58%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/Tbk4_U2MPLI/AAAAAAAAOsA/SWmKLMc8V30/image_thumb%5B40%5D.png?imgmax=800" width="644" height="432" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;同時，針對企業內的協同作業，Office 365也內建Sharepoint online，企業就不需要再自行建置Sharepoint Server，只需要啟用Office 365，就有馬上可以使用的Sharepoint Online環境可以進行協同作業!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/Tbk5B9GNkAI/AAAAAAAAOsE/BPUUVLyQ85I/s1600-h/image%5B61%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/Tbk5E9akR8I/AAAAAAAAOsI/gs30-6RHQEQ/image_thumb%5B43%5D.png?imgmax=800" width="633" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/Tbk5HNezb5I/AAAAAAAAOsM/t8bbozXMypo/s1600-h/image%5B64%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/Tbk5LaQFF9I/AAAAAAAAOsQ/6qCAyrqWljE/image_thumb%5B46%5D.png?imgmax=800" width="644" height="402" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;不到10分鐘的時間，整個公司所需要的Email環境、協同作業環境以及即時通訊的雲端辦公室環境就設定好了，真是方便!! 如果說Windows Azure是&amp;quot;IT Ready&amp;quot;的開發環境的話，Office 365就是&amp;quot;Office Ready&amp;quot;的環境，只需要花些許的成本，就可以有隨時可用的辦公室環境!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1515799824028660954?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1515799824028660954/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1515799824028660954' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1515799824028660954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1515799824028660954'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/04/office-365-beta-1.html' title='Office 365 Beta 初窺(1) -- 啟用'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/Tbk4pGS0vNI/AAAAAAAAOrY/5hGmrjPcTGw/s72-c/image_thumb%5B23%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1554920773637562280</id><published>2011-04-22T00:31:00.001+08:00</published><updated>2011-04-22T00:35:57.927+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WIF'/><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>當透過WIF設定Claims-based驗證時，出現"ASP.NET設定沒有套用到整合式Managed管線模式" 錯誤訊息</title><content type='html'>&lt;p&gt;若是要在多個站台間建立SSO(Single Sign-On)，WIF(Windows Identity Foundation)是很容易可以使用的一種技術。透過Visual Studio 2010開發工具加上WIF SDK的協助，你可以快速地建立SSO所需要的Identity Provider或是Security Token Service，讓使用者只需登入一次就可以使用多個網站或是網路服務的功能。&lt;/p&gt;  &lt;p&gt;在 Visual Studio 2010 開發工具中，你可以在網站中，透過 &amp;quot;Add STS Reference&amp;quot; 的方式，指定負責驗證的Security Token Service：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TbBb4mODAvI/AAAAAAAAOqo/XCshCjvB7jY/s1600-h/image%5B17%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TbBb6HqO_iI/AAAAAAAAOqs/qtJRNO2WELo/image_thumb%5B13%5D.png?imgmax=800" width="459" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;詳細的設定步驟這裡先省略，設定完成之後，WIF SDK當中的組態設定工具，FedUtil.exe，會自動調整Web.Config組態黨的設定，讓網站可以支援Claims-based的驗證模式。但是若是你在設定好之後直接執行網站，你會得到下面的錯誤訊息：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TbBb7VGmXoI/AAAAAAAAOqw/3OWUsNX_7P4/s1600-h/image%5B20%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TbBb9HvfxcI/AAAAAAAAOq0/HGgYx8cG05Q/image_thumb%5B16%5D.png?imgmax=800" width="750" height="401" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;錯誤發生的原因，發生在WIF組態設定工具在調整Web.Config檔案時，沒有在&amp;lt;system.webServer&amp;gt;組態中加入下面的項目：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;lt;validation validateIntegratedModeConfiguration=&amp;quot;false&amp;quot; /&amp;gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;只需要把這項目加入，你的網站就可以正常執行了!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1554920773637562280?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1554920773637562280/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1554920773637562280' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1554920773637562280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1554920773637562280'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/04/wif.html' title='當透過WIF設定Claims-based驗證時，出現&amp;quot;ASP.NET設定沒有套用到整合式Managed管線模式&amp;quot; 錯誤訊息'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pfobZznF9qw/TbBb6HqO_iI/AAAAAAAAOqs/qtJRNO2WELo/s72-c/image_thumb%5B13%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4970571757589679905</id><published>2011-04-18T01:38:00.001+08:00</published><updated>2011-04-18T12:46:07.169+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><title type='text'>太陽下山，銀光瀉地</title><content type='html'>&lt;p&gt;在 sun.com即將走入歷史，Silverlight 5 Beta正式發佈的時刻，利用這一篇網誌對照一下.NET與Java的技術架構。首先，在.NET的技術架構中，.NET Framework 4 Client Profile提供了一般桌上型應用程式所需要的執行環境與函式庫，與Java SE作用相當；而.NET Framework 4則是提供了包含ASP.NET、WF、WCF等等企業級應用程式所需要的執行環境與函式庫，因此與Java EE的定位是相同的：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TaslpL3xktI/AAAAAAAAOqQ/opmdbRXJZEg/s1600-h/image%5B28%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/Taslp89J48I/AAAAAAAAOqU/9noB1_3Pyn4/image_thumb%5B22%5D.png?imgmax=800" width="644" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;而Silverlight 4技術除了可以用來開發嵌入在網頁中執行的應用程式之外，於瀏覽器外執行時也可以安裝在用戶端，當成一般的桌上型應用程式執行；更可以開發手機的應用程式：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TaslqtIJdeI/AAAAAAAAOqY/XS6aQWDwAAA/s1600-h/image%5B25%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TaslrdDNwvI/AAAAAAAAOqc/glWubGsuHEs/image_thumb%5B19%5D.png?imgmax=800" width="644" height="118" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;到了SIlverlight 5之後，Silverlight可以跨Linux、Windows以及MAC的執行環境，會繼續加強於瀏覽器外執行時，在用戶端可以執行的功能，讓你的應用程式可以真正 &amp;quot;開發一次，到處執行&amp;quot; !!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TaslsGxXHhI/AAAAAAAAOqg/TFABIiz8lpQ/s1600-h/image%5B22%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TaslsjQnixI/AAAAAAAAOqk/LLkyat96gng/image_thumb%5B16%5D.png?imgmax=800" width="644" height="121" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4970571757589679905?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4970571757589679905/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4970571757589679905' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4970571757589679905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4970571757589679905'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/04/blog-post.html' title='太陽下山，銀光瀉地'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_pfobZznF9qw/Taslp89J48I/AAAAAAAAOqU/9noB1_3Pyn4/s72-c/image_thumb%5B22%5D.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-5973413653382739436</id><published>2011-03-29T23:40:00.001+08:00</published><updated>2011-03-30T01:02:23.655+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>Web應用程式，真的有比較節省資源(Thin Client)??</title><content type='html'>&lt;p&gt;以往，大家都覺得開發Web應用程式有下面的好處：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;用戶端只需要透過瀏覽器執行 HTML+JavaScript，不會消耗太多資源。 &lt;/li&gt;    &lt;li&gt;動態網頁程式維護在Server端，因此更新容易。 &lt;/li&gt;    &lt;li&gt;可以跨平台操作 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;我們來驗證一下是不是真的。首先，下面是三種主流瀏覽器只開啟FB時所占用的系統資源(對照組，VS 2010同時間開啟一個專案佔105240K)：&lt;/p&gt;  &lt;p&gt;Chrome 10: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZH9XmFdi2I/AAAAAAAAOpo/PMnvHfupXTY/s1600-h/image%5B5%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TZH9Y57eQII/AAAAAAAAOps/_RFxsjOok8U/image_thumb%5B3%5D.png?imgmax=800" width="647" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;IE 9:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TZH9Zm12YXI/AAAAAAAAOpw/wyzsfIKnmNU/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TZH9amZMPkI/AAAAAAAAOp0/xAmMGGsi6tc/image_thumb%5B7%5D.png?imgmax=800" width="643" height="387" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Firefox 4:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZH9bVyW5RI/AAAAAAAAOp4/YM8kaPC1vCY/s1600-h/image%5B17%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TZH9cYKACdI/AAAAAAAAOp8/dubDX-ScPXA/image_thumb%5B11%5D.png?imgmax=800" width="624" height="462" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;這只是剛開啟而已，利用Firefox 4開啟 FB 之後，啥事都沒做閒置 5分鐘之後，記憶體自動增加 17000K：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZH9dMcRLLI/AAAAAAAAOqA/BAziW5SXpwY/s1600-h/image%5B22%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TZH9d7MnM6I/AAAAAAAAOqE/bBxe0keS1ec/image_thumb%5B14%5D.png?imgmax=800" width="614" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;網頁開啟越久，所占用的記憶體空間就會越來越大；如果網頁開的多的話，最大占用到幾百MB到幾GB都有可能，所以不要以為Web應用程式在前端執行時會節省多少資源 -- 瀏覽器本身已經就是一個大怪獸了( HTML 5還沒真的來喔…)，若再加上疊床架屋套用好幾代Framework無法最佳化的JavaScript，很容易就變成一場災難…&lt;/p&gt;  &lt;p&gt;若是與之前協助客戶導入Silverlight時所建立的資料庫整合系統範例相比較，當程式啟動之後所占用的資源如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TZH9evO496I/AAAAAAAAOqI/NbSypkoAsvs/s1600-h/image%5B28%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TZH9fZ04t1I/AAAAAAAAOqM/N9brXUwqZRI/image_thumb%5B18%5D.png?imgmax=800" width="666" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;這隻程式是以 &amp;quot;&lt;strong&gt;於瀏覽器外執行&lt;/strong&gt;&amp;quot; 的方式，在用戶端執行的程式啟動之後，透過 sllauncher.exe執行檔裝載 Silverlight應用程式執行，不但所占用的資源比瀏覽器少，而且透過.NET Framework執行環境的GC，會自動回收程式所沒用到的記憶體資源，因此也不會像瀏覽器一直消耗用戶端的記憶體空間。&lt;/p&gt;  &lt;p&gt;更重要的是，你所開發的 Silverlight應用程式於瀏覽器外執行時，還可以自動更新。換句話說，用戶端安裝完你的 Silverlight應用程式之後，將來若是有新的版本，你可以不需要為每個用戶端重新安裝，用戶端程式在啟動時可以自動下載更新成最新版本。&lt;/p&gt;  &lt;p&gt;至於跨平台... 對於企業所使用的系統而言，Silverlight執行環境目前涵蓋Windows、MAC以及Linux(Moonlight支援到2.0)三大作業系統，已經可以滿足大部分企業使用者環境的需要。因此若是需要開發高互動性、與資料庫結合的用戶端應用程式，Web應用程式不見得會比Silverlight應用程式來的好 -- 從執行環境上看來是的，更別說開發與除錯程式所需要花的時間…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-5973413653382739436?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/5973413653382739436/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=5973413653382739436' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5973413653382739436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5973413653382739436'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/03/webthin-client.html' title='Web應用程式，真的有比較節省資源(Thin Client)??'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pfobZznF9qw/TZH9Y57eQII/AAAAAAAAOps/_RFxsjOok8U/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2659212988359940906</id><published>2011-03-28T23:48:00.001+08:00</published><updated>2011-03-29T00:36:27.523+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT Pro要你知道的事'/><title type='text'>在Windows作業系統當中移除CNNIC憑證</title><content type='html'>&lt;p&gt;&lt;font color="#ff0000"&gt;[感謝恆逸資訊 Patty老師補充 &amp;quot;對這個憑證停用所有目的&amp;quot; 的設定]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;在 &amp;quot;&lt;a href="http://john-publish.blogspot.com/2011/03/blog-post.html"&gt;不要錢的無線網路 -- 最貴&lt;/a&gt;&amp;quot; 這一篇網誌當中，我簡單的介紹了一下SSL與憑證之間的關係，相信大家都已經知道開啟網站的時候，&amp;quot;憑證&amp;quot; 是不可以隨便亂信任的。但是如果瀏覽器本身就已經信任了可能不安全的根憑證核發單位的話，又應該要怎樣處理呢?&lt;/p&gt;  &lt;p&gt;今天在FB中與朋友分享了一篇文章 &amp;quot;&lt;a title="Permanent Link to 在 Linux 上移除 CNNIC 憑證" href="http://people.debian.org.tw/~chihchun/2010/02/02/remove-cnnic-cert-on-linux/"&gt;在 Linux 上移除 CNNIC 憑證&lt;/a&gt;&amp;quot;，其中提到了有關CNNIC(中國互聯網絡信息中心)從某些過去紀錄上來考量，是屬於較有疑慮的根憑證核發單位，因此建議移除；加上根據某可靠的數據來源也顯示，台灣大部分的網路攻擊也是來於中國，因此Firefox 3.6與4.0將CNNIC加入瀏覽器預設的根憑證信任中心的做法，某種程度來說是相對不安全的，建議可以移除。&lt;/p&gt;  &lt;p&gt;在Firefox瀏覽器中要移除CNNIC的憑證，可以在開啟 &amp;quot;&lt;strong&gt;選項&lt;/strong&gt;&amp;quot; 視窗之後，選取 &amp;quot;&lt;strong&gt;進階&lt;/strong&gt;&amp;quot; –&amp;gt; &amp;quot;&lt;strong&gt;檢視憑證清單&lt;/strong&gt;&amp;quot;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZCtd9CZXzI/AAAAAAAAOoI/J1bo35u0_kI/s1600-h/Image.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2011-3-28 下午 12-01-19" border="0" alt="2011-3-28 下午 12-01-19" src="http://lh6.ggpht.com/_pfobZznF9qw/TZCtekkPnRI/AAAAAAAAOoM/ApsoLbE7ob8/Image.jpg?imgmax=800" width="411" height="434" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;接下來從 &amp;quot;&lt;strong&gt;憑證機構&lt;/strong&gt;&amp;quot; 當中，展開CNNIC下方的 &amp;quot;&lt;strong&gt;CNNIC ROOT&lt;/strong&gt;&amp;quot; 憑證，按下 &amp;quot;&lt;strong&gt;刪除或取消憑證&lt;/strong&gt;&amp;quot;：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TZCtfiz7BGI/AAAAAAAAOoQ/4JBS5PspCuU/s1600-h/Image.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2011-3-28 下午 12-02-01" border="0" alt="2011-3-28 下午 12-02-01" src="http://lh6.ggpht.com/_pfobZznF9qw/TZCtgkLHaxI/AAAAAAAAOoU/193I8Nyikho/Image.jpg?imgmax=800" width="428" height="285" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;此時會出現如下圖的警告視窗，按下 &amp;quot;&lt;strong&gt;確定&lt;/strong&gt;&amp;quot; 按鈕即可：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZCth5M1sfI/AAAAAAAAOoY/bLz3y-7r2Bs/s1600-h/Image.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2011-3-28 下午 12-02-10" border="0" alt="2011-3-28 下午 12-02-10" src="http://lh5.ggpht.com/_pfobZznF9qw/TZCti15ZENI/AAAAAAAAOoc/-_AxpH6-TL0/Image.jpg?imgmax=800" width="420" height="216" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;IE 9 預設並沒有將CNNIC加入信任的根憑證核發單位，但是比較討厭的是，當你瀏覽使用由CNNIC所核發的伺服器憑證的網站，如CNNIC 的&lt;a href="https://tns-fsverify.cnnic.cn/"&gt;網址衛士&lt;/a&gt; (使用 Entrust.net) 或 CNNIC 的 &lt;a href="https://www.enum.cn/cn/"&gt;ENUM 試驗平台&lt;/a&gt; (使用 CNNIC Root Cert)時，CNNIC ROOT的憑證會自動地被加入IE 9 的任的根憑證核發單位中!! 此時可以參考下面的方法處理：&lt;/p&gt;  &lt;p&gt;首先，在Windows的命令列視窗中，輸入 &amp;quot;&lt;strong&gt;MMC&lt;/strong&gt;&amp;quot; 指令開啟主控台視窗：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TZCtjRS-tmI/AAAAAAAAOog/eU8NOT0kvEc/s1600-h/image%5B43%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TZCtkFvsXuI/AAAAAAAAOok/ubqCy4i5m88/image_thumb%5B30%5D.png?imgmax=800" width="576" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;接著，選取 &amp;quot;&lt;strong&gt;檔案&lt;/strong&gt;&amp;quot; –&amp;gt; &amp;quot;&lt;strong&gt;新增/移除嵌入式管理單元&lt;/strong&gt;&amp;quot;：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZCtlPs4QsI/AAAAAAAAOoo/KB9reMAbT7g/s1600-h/image%5B47%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TZCtl3DlJgI/AAAAAAAAOos/VUqGmg_dYto/image_thumb%5B34%5D.png?imgmax=800" width="554" height="330" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;選取 &amp;quot;&lt;strong&gt;憑證&lt;/strong&gt;&amp;quot; 之後按下 &amp;quot;&lt;strong&gt;新增&lt;/strong&gt;&amp;quot;：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZCtmh9MTzI/AAAAAAAAOow/FUA34nC240w/s1600-h/image%5B54%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TZCtodpzvrI/AAAAAAAAOo0/iQ34WPExTaY/image_thumb%5B41%5D.png?imgmax=800" width="559" height="368" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;接著選取 &amp;quot;&lt;strong&gt;我的使用者帳戶&lt;/strong&gt;&amp;quot;，然後按下 &amp;quot;&lt;strong&gt;完成&lt;/strong&gt;&amp;quot; 按鈕，再按下 &amp;quot;&lt;strong&gt;確定&lt;/strong&gt;&amp;quot;：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZCtpM9-owI/AAAAAAAAOo4/FR33l2x7lWk/s1600-h/image%5B57%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TZCtp4-KnEI/AAAAAAAAOo8/ZucLTls0IuA/image_thumb%5B44%5D.png?imgmax=800" width="479" height="351" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;若是你有開啟過前面所提到的使用CNNIC所核發的憑證的網站，在 &amp;quot;&lt;strong&gt;受信任的根憑證授權單位&lt;/strong&gt;&amp;quot; 的 &amp;quot;&lt;strong&gt;憑證&lt;/strong&gt;&amp;quot; 當中，就會出現 &amp;quot;&lt;strong&gt;CNNIC ROOT&lt;/strong&gt;&amp;quot; 的憑證：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TZCtq7OIoFI/AAAAAAAAOpA/sgNCiz3tXDo/s1600-h/image%5B62%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TZCtsFv5fTI/AAAAAAAAOpE/2ry2fk240pA/image_thumb%5B49%5D.png?imgmax=800" width="633" height="358" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;此時將 &amp;quot;&lt;strong&gt;CNNIC ROOT&lt;/strong&gt;&amp;quot; 憑證移到 &amp;quot;&lt;strong&gt;沒有信任的憑證&lt;/strong&gt;&amp;quot; 當中，會出現下面的對話方塊：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TZCts2uqEXI/AAAAAAAAOpI/7OpSv5ZNtbU/s1600-h/image%5B65%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TZCttyKXkGI/AAAAAAAAOpM/L7YvlUEBWQ8/image_thumb%5B52%5D.png?imgmax=800" width="391" height="252" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;按下 &amp;quot;&lt;strong&gt;是&lt;/strong&gt;&amp;quot; 之後，在 &amp;quot;沒有信任的憑證&amp;quot; 當中，選取CNNIC ROOT憑證按下滑鼠右鍵，然後選取 &amp;quot;內容&amp;quot;：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZC4_h7calI/AAAAAAAAOpY/IO45jgEzO_M/s1600-h/image%5B12%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TZC5ArVaPhI/AAAAAAAAOpc/6KAM6bI9TSY/image_thumb%5B7%5D.png?imgmax=800" width="401" height="272" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;在憑證目的當中，選取 &amp;quot;對這個憑證停用所有目的&amp;quot;，然後按下 &amp;quot;確定&amp;quot; 按鈕：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TZC5BeAuAkI/AAAAAAAAOpg/ID16rs9xSrM/s1600-h/image%5B15%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TZC5Csfor4I/AAAAAAAAOpk/y5cmVnnpvh8/image_thumb%5B10%5D.png?imgmax=800" width="427" height="495" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;將來瀏覽CNNIC 的網址衛士 (使用 Entrust.net) 或 CNNIC 的 ENUM 試驗平台 (使用 CNNIC Root Cert)時，就不會自動信任以及安裝CNNIC的憑證了!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TZCtuiHbKFI/AAAAAAAAOpQ/ZeremB_yxWs/s1600-h/image%5B69%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TZCtv5VmAaI/AAAAAAAAOpU/9ntvpo6lrE8/image_thumb%5B56%5D.png?imgmax=800" width="693" height="405" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2659212988359940906?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2659212988359940906/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2659212988359940906' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2659212988359940906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2659212988359940906'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/03/windowscnnic.html' title='在Windows作業系統當中移除CNNIC憑證'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/TZCtekkPnRI/AAAAAAAAOoM/ApsoLbE7ob8/s72-c/Image.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1429358041231810476</id><published>2011-03-22T14:56:00.001+08:00</published><updated>2011-03-28T13:51:25.263+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><title type='text'>ASP.NET升級白皮書</title><content type='html'>&lt;p&gt;&lt;font color="#ff0000"&gt;[2010.03.28 更新] 感謝王寧疆老師分享了透過Visual Studio 2010開發工具直接升級ASP.NET 1.x專案的經驗，因此將白皮書的內容做了一些調整。&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a name="_Ref288556801"&gt;前言&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;雖然目前ASP.NET已經進入到4.0版，但是相信在企業之中，仍然有些既有的ASP.NET 1.x版的網站仍然穩定的執行中。然而隨著企業需求的變化以及IT環境的調整，這些ASP.NET 1.x的網站通常也面臨到必須升級到新的版本，才能繼續提供更好的服務的時刻。在這一份白皮書中，將為各位介紹使用Visual Studio開發工具，從ASP.NET 1.x版升級到ASP.NET 4.0版所需要的步驟。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Ref288556897"&gt;&lt;font color="#000000"&gt;將ASP.NET 1.x &lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt;專案升級到ASP.NET 4.0的步驟&lt;/font&gt;&lt;/h2&gt;  &lt;p&gt;ASP.NET的技術架構從2.0版開始，無論是前端網站與後端功能方面，都做了大幅度的擴充與改變，因此在新版的Visual Studio 2010開發工具當中，提供了轉換的精靈，可以幫助你將現有的ASP.NET 1.x專案升級到ASP.NET 4.0的版本。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;&lt;a name="_Ref288556911"&gt;使用Visual Studio 2010&lt;/a&gt;轉換精靈升級ASP.NET 1.x專案&lt;/h3&gt;  &lt;p&gt;為了簡化從ASP.NET 1.x升級到ASP.NET 4.0所需要的步驟，微軟在ASP.NET 4.0的開發工具—Visual Studio 2010當中，提供了轉換精靈，協助你將現有的ASP.NET 1.x的專案升級成為ASP.NET 4.0的專案。各位可以透過Visual Studio 2010開發工具參考下面的步驟進行升級：&lt;/p&gt;  &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;備份專案&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;在升級現有的ASP.NET 1.x專案之前，請記得要先備份現有的ASP.NET 1.x應用程式專案。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;使用Visual Studio 2010&lt;/b&gt;&lt;b&gt;開發工具開啟ASP.NET 1.x&lt;/b&gt;&lt;b&gt;專案&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;當使用Visual Studio 2010開發工具開啟ASP.NET 1.x版的專案檔時，Visual Studio 2010開發工具就會啟動如圖1的轉換精靈：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZAhRCE2neI/AAAAAAAAOmg/ZlD7AmlMuG8/s1600-h/pic01%5B9%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic01" border="0" alt="pic01" src="http://lh4.ggpht.com/_pfobZznF9qw/TZAhTDAnmKI/AAAAAAAAOmk/bJW8Kv4BC1Q/pic01_thumb%5B9%5D.png?imgmax=800" width="428" height="377" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;1&lt;/em&gt;&lt;em&gt;：&lt;/em&gt;&lt;em&gt;Visual Studio 2010&lt;/em&gt;&lt;em&gt;轉換精靈&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;按下「&lt;b&gt;下一步&lt;/b&gt;」按鈕之後，會出現圖2的對話方塊，詢問你需不需要建立現有的解決方案檔的備份：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZAhVEoQbSI/AAAAAAAAOmo/YL0sC9wpp4c/s1600-h/pic02%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic02" border="0" alt="pic02" src="http://lh4.ggpht.com/_pfobZznF9qw/TZAhX_IQPOI/AAAAAAAAOms/gDl8e4eY22I/pic02_thumb%5B4%5D.png?imgmax=800" width="435" height="383" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;2&lt;/em&gt;&lt;em&gt;：「是否建立專案檔備份」對話方塊&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;若是你在步驟1已經將ASP.NET 1.x版的專案備份完成了，這裡就只需要按下「&lt;b&gt;下一步&lt;/b&gt;」按鈕，就會出現如圖3的視窗：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TZAhZvIJhPI/AAAAAAAAOmw/D_TuCJRtj8Y/s1600-h/pic03%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic03" border="0" alt="pic03" src="http://lh5.ggpht.com/_pfobZznF9qw/TZAhbX4_h6I/AAAAAAAAOm0/43TGxrmLWpc/pic03_thumb%5B4%5D.png?imgmax=800" width="449" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;3&lt;/em&gt;&lt;em&gt;：「可以開始轉換」對話方塊&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;接著按下「&lt;b&gt;完成&lt;/b&gt;」按鈕，Visual Studio 2010的轉換精靈就會開始將ASP.NET 1.x版的專案升級成為ASP.NET 4.0版的專案。接著你會看到圖4的提示對話方塊，提醒你在完成專案升級之後，還需要手動將原本的ASP.NET 1.x專案轉換成為Web應用程式專案：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZAhcxyLifI/AAAAAAAAOm4/B_7kBJj1gFc/s1600-h/pic04%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic04" border="0" alt="pic04" src="http://lh3.ggpht.com/_pfobZznF9qw/TZAhe9JzNGI/AAAAAAAAOm8/wDeUkMvRFvk/pic04_thumb%5B5%5D.png?imgmax=800" width="456" height="183" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;圖4&lt;/i&gt;&lt;i&gt;：完成轉換的對話方塊&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;按下「&lt;b&gt;確定&lt;/b&gt;」按鈕之後，會出現圖5的「&lt;b&gt;轉換完成&lt;/b&gt;」對話方塊，按下「&lt;b&gt;關閉&lt;/b&gt;」按鈕專案就轉換完成了!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZAhf0pv3HI/AAAAAAAAOnA/089sdEYVmJ4/s1600-h/pic05%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic05" border="0" alt="pic05" src="http://lh5.ggpht.com/_pfobZznF9qw/TZAhhE-EpDI/AAAAAAAAOnE/MrdA1W1B_hg/pic05_thumb%5B4%5D.png?imgmax=800" width="465" height="409" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;5&lt;/em&gt;&lt;em&gt;：「轉換完成」對話方塊&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;同時，若是在專案轉換的過程當中，有任何的錯誤或是需要注意的地方，Visual Studio 2010也會自動地顯示在轉換報告當中，如圖6所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZAhildSbCI/AAAAAAAAOnI/4OSNX42m3f0/s1600-h/pic06%5B6%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic06" border="0" alt="pic06" src="http://lh5.ggpht.com/_pfobZznF9qw/TZAhkyfB5TI/AAAAAAAAOnM/2RHu0qP69Lw/pic06_thumb%5B9%5D.png?imgmax=800" width="470" height="217" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;6&lt;/em&gt;&lt;em&gt;：轉換報告&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;驗證新的ASP.NET 4.0&lt;/b&gt;&lt;b&gt;專案&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;因為ASP.NET 4.0的專案與ASP.NET 1.x的專案有許多不同的地方，因此在透過Visual Studio 2010轉換精靈升級完成你的專案之後，除了要參考轉換報告解決升級時所遇到的問題之外，也必須要進行功能上的驗證，才能確定原有的專案是否成功的升級了。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;將ASP.NET 4.0&lt;/b&gt;&lt;b&gt;專案轉換為Web&lt;/b&gt;&lt;b&gt;應用程式&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;在Visual Studio 2010開發工具當中，為了方便維護在ASP.NET 4.0表單中的使用者自訂程式碼，特別將設計工具所建立的程式碼，獨立放置在附檔名為「.designer.cs」的程式碼後置檔案當中。當你驗證轉換完成的ASP.NET 4.0專案之後，可以在方案總管當中，按下滑鼠右鍵然後選取「轉換成Web應用程式」項目，如圖7所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZAhmAyi3GI/AAAAAAAAOnQ/kPYrPNr_FJg/s1600-h/pic07%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic07" border="0" alt="pic07" src="http://lh4.ggpht.com/_pfobZznF9qw/TZAhn48oCEI/AAAAAAAAOnU/-Lvri-k60vQ/pic07_thumb%5B4%5D.png?imgmax=800" width="470" height="332" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;圖7&lt;/i&gt;&lt;i&gt;：&lt;/i&gt;&lt;i&gt;「&lt;/i&gt;&lt;i&gt;轉換成Web&lt;/i&gt;&lt;i&gt;應用程式&lt;/i&gt;&lt;i&gt;」&lt;/i&gt;&lt;i&gt;項目&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;此時會出現如圖8的對話方塊，按下「&lt;b&gt;是&lt;/b&gt;」按鈕之後就可以開始將專案轉換成為Web應用程式：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TZAhpa5muiI/AAAAAAAAOnY/MEwifRuIul8/s1600-h/pic08%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic08" border="0" alt="pic08" src="http://lh4.ggpht.com/_pfobZznF9qw/TZAhrLmPZ2I/AAAAAAAAOnc/qCcG0q3CSBA/pic08_thumb%5B5%5D.png?imgmax=800" width="474" height="174" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;圖8&lt;/i&gt;&lt;i&gt;：轉換成為Web&lt;/i&gt;&lt;i&gt;應用程式對話方塊，&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;圖9的右邊是轉換後的ASP.NET 4.0專案，如果和左邊轉換前的專案比較，你會發現無論是ASP.NET網頁或是ASP.NET使用者控制項，都會多出一個「.designer.cs」的程式碼後置檔案，這就是Visual Studio 2010用來維護設計工具所建立的程式碼的程式碼後置檔：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TZAhsS4hYrI/AAAAAAAAOng/rYi1uytvhrk/s1600-h/pic09%5B6%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic09" border="0" alt="pic09" src="http://lh3.ggpht.com/_pfobZznF9qw/TZAhtRGBG8I/AAAAAAAAOnk/NX1zZ7cCkrk/pic09_thumb%5B6%5D.png?imgmax=800" width="478" height="132" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;圖9&lt;/i&gt;&lt;i&gt;：轉換完成之後的ASP.NET 4.0&lt;/i&gt;&lt;i&gt;專案目錄結構&lt;/i&gt;&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a name="_Ref288556918"&gt;ASP.NET 4.0&lt;/a&gt;專案與ASP.NET 1.x專案的相異處&lt;/h3&gt;  &lt;p&gt;升級完成之後，你也會發現在Visual Studio 2010開發工具中的ASP.NET 4.0專案與ASP.NET 1.x專案有下面幾個不一樣的地方：&lt;/p&gt;  &lt;p&gt;1. &lt;b&gt;多目標Framework&lt;/b&gt;&lt;b&gt;支援&lt;/b&gt;：預設Visual Studio 2010的轉換精靈會將ASP.NET 1.x專案升級成為ASP.NET 4.0專案，但若是有需要的話，你還是可以在專案的屬性頁當中，將專案設定為ASP.NET 2.0以後的任一個版本&lt;a href="file:///C:/Users/john_s_chang/Dropbox/For Dann/ASP.NET 1.x??????/#_ftn1_6277" name="_ftnref1_6277"&gt;[1]&lt;/a&gt;，如圖10所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZAhuEGo4PI/AAAAAAAAOno/e2iv2d-EOlE/s1600-h/pic10%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic10" border="0" alt="pic10" src="http://lh6.ggpht.com/_pfobZznF9qw/TZAhvQSMF2I/AAAAAAAAOns/_09n6LuCQ0A/pic10_thumb%5B5%5D.png?imgmax=800" width="322" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;圖10&lt;/i&gt;&lt;i&gt;：設定ASP.NET&lt;/i&gt;&lt;i&gt;專案的.NET Framework&lt;/i&gt;&lt;i&gt;版本&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;2. &lt;b&gt;特殊目錄：&lt;/b&gt;ASP.NET 4.0當中規範了一些特別用途的目錄，像是&lt;b&gt;App_Data&lt;/b&gt;是用來暫存專案中所使用的資料庫檔；而原本ASP.NET 1.x專案當中所建立自訂的類別定義檔，則會統一放在&lt;b&gt;App_Code&lt;/b&gt;目錄底下，如圖11所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TZAhwFq3GPI/AAAAAAAAOnw/IWODpAPclOw/s1600-h/pic11%5B4%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic11" border="0" alt="pic11" src="http://lh4.ggpht.com/_pfobZznF9qw/TZAhxBNnAeI/AAAAAAAAOn0/V9xmVU88pSM/pic11_thumb%5B4%5D.png?imgmax=800" width="301" height="391" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;11&lt;/em&gt;&lt;em&gt;：&lt;/em&gt;&lt;em&gt;ASP.NET 4.0&lt;/em&gt;&lt;em&gt;專案當中的&lt;/em&gt;&lt;em&gt;App_Code&lt;/em&gt;&lt;em&gt;目錄&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;ASP.NET 4.0的特殊目錄整理如下：   &lt;table border="1" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;目錄名稱&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;說明&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;App_Browsers&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0網頁在不同瀏覽器中，所需要調整的定義檔。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;App_Code&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0專案中自訂的類別定義檔。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;App_Data&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0專案所需要的mdf資料庫檔或是xml檔案。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;App_GlobalResources&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0專案中的RESX或是Resources資源檔，這些資源檔定義會被編譯到組件中供專案全域使用。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;App_LocalResources&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0專案中的RESX或是Resources資源檔，這些資源檔只會使用在特定的ASPX表單或是使用這控制項中。。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;App_Themes&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0專案中的Skin或是Css樣式檔。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;App_WebReferences&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0專案所參考的網路服務的WSDL文件。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td valign="top" width="172"&gt;           &lt;p&gt;Bin&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top" width="372"&gt;           &lt;p&gt;存放ASP.NET 4.0專案建置時，所編譯完成的組件。&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;程式碼後置模型的改變：&lt;/b&gt;ASP.NET 1.x的程式碼後置模型，是把網頁的樣式定義在ASPX的檔案中(例如Default.aspx)；而使用者自訂與開發工具所建立的程式碼，則是統一放在另一個程式碼中(例如Default.aspx.cs)。而因為.NET Framework 2.0開始，就加入了對於部分類別(Partial class)的支援，因此在ASP.NET 4.0當中，可以更進一步的使用部分類別的語法，將使用者自訂的程式碼與開發工具自動建立的程式碼再分開成不同的檔案維護。如此一來，ASPX網頁後置的程式碼檔案就會更加的精簡，也將更容易維護。&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;此外，原本在ASP.NET 1.x網頁當中，@Page指示詞的&lt;b&gt;CodeBehind&lt;/b&gt;屬性，在ASP.NET 2.0開始的網頁當中，也換成了&lt;b&gt;CodeFile&lt;/b&gt;屬性，並且只需要設定到儲存使用者自訂程式碼的檔案就可以了。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;多組件編譯：&lt;/b&gt;Visual Studio 2010開發工具預設會將專案中的每個表單與使用這控制項編譯成各自獨立的組件，方便專案的更新與部署。&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;5. &lt;/b&gt;&lt;b&gt;發行選項：&lt;/b&gt;Visual Studio 2010針對ASP.NET 4.0的網站提供了多種部署的發行方式(如圖12)。你可以透過Visual Studio 2010所提供的「發行」功能，選擇ASP.NET 4.0專案開發完成之後，根據開發或是測試的需要，所要部署的不同位置：&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZAhyI7sJUI/AAAAAAAAOn4/i98PBZoYweM/s1600-h/pic12%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic12" border="0" alt="pic12" src="http://lh6.ggpht.com/_pfobZznF9qw/TZAhz-vyS4I/AAAAAAAAOn8/VhbwnjyOxnY/pic12_thumb%5B5%5D.png?imgmax=800" width="365" height="511" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;12&lt;/em&gt;&lt;em&gt;：&lt;/em&gt;&lt;em&gt;Visual Studio 2010&lt;/em&gt;&lt;em&gt;的「發行」功能&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;更詳細的部署選項，可以從專案屬性頁的「封裝/發行Web」中設定：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TZAh1qaC3PI/AAAAAAAAOoA/Q6jD-BbRILM/s1600-h/pic13%5B6%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="pic13" border="0" alt="pic13" src="http://lh3.ggpht.com/_pfobZznF9qw/TZAh24TPLLI/AAAAAAAAOoE/VuXfG8zjhvk/pic13_thumb%5B6%5D.png?imgmax=800" width="574" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;圖&lt;/em&gt;&lt;em&gt;13&lt;/em&gt;&lt;em&gt;：設定「封裝&lt;/em&gt;&lt;em&gt;/&lt;/em&gt;&lt;em&gt;發行&lt;/em&gt;&lt;em&gt;Web&lt;/em&gt;&lt;em&gt;」功能&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;&lt;a name="_Ref288556925"&gt;結語&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;在最新的ASP.NET 4.0當中，提供了許多現代大型網際網路應用程式所需要的功能，像是平行運算、MVC、AJAX… 等等；透過這些新功能的支援，ASP.NET的網站就可以發揮更多的應用。而對於ASP.NET 1.x的網站來說，必須將網站升級之後，才可以繼續使用Visual Studio 2010最新的功能。雖然透過Visual Studio 2010升級是件相當容易，也相當快速的事情，然而因為ASP.NET 4.0 在功能上做了很多改變，因此在使用轉換精靈升級現有的ASP.NET 1.x專案之後，必須要記得配合這些改變做必要的檢查與測試，將來才可以開發功能更強大的ASP.NET應用程式!!&lt;/p&gt;  &lt;hr align="left" size="1" width="33%" /&gt;  &lt;p&gt;&lt;a href="file:///C:/Users/john_s_chang/Dropbox/For Dann/ASP.NET 1.x??????/#_ftnref1_6277" name="_ftn1_6277"&gt;[1]&lt;/a&gt; 若是你已經在專案中使用了某些.NET Framework 4.0所提供的新功能的話，這一個動作可能會導致這些新功能無法在舊版的.NET Framework中被正常的執行，必須要特別注意 !&lt;/p&gt;  &lt;h4&gt;&amp;#160;&lt;/h4&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;a name="_Ref288556961"&gt;&lt;font color="#000000"&gt;將ASP.NET 2.0&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000"&gt;與ASP.NET 3.x應用程式升級為ASP.NET4.0&lt;/font&gt;&lt;/h2&gt;  &lt;p&gt;ASP.NET開發技術目前已被廣泛的使用在網際網路與企業當中，隨著網際網路應用需求的日新月異，為了滿足開發人員在應用方面的需求，ASP.NET所支援的功能也隨之增加，像是AJAX、Dynamic Data與MVC等等，都是ASP.NET 4.0當中所內建的新功能。換言之，開發人員不需要另外再外掛任何的函式庫，就可以直接的應用在ASP.NET的專案當中。&lt;/p&gt;  &lt;p&gt;隨著ASP.NET版本的更新，許多開發人員也會想要把這些新的功能，應用在現有的專案當中，因此就需要將現有的ASP.NET 2.0或是ASP.NET 3.x應用程式升級到最新的ASP.NET 4.0版本。ASP.NET應用程式的升級可以分成兩個部分來談：&lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;升級ASP.NET應用程式專案 &lt;/li&gt;      &lt;li&gt;升級ASP.NET執行環境 &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;h5&gt;&amp;#160;&lt;/h5&gt;  &lt;h5&gt;&lt;a name="_Ref288556970"&gt;&lt;font color="#000000" size="4"&gt;&lt;u&gt;升級為ASP.NET 4.0&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000" size="4"&gt;&lt;u&gt;應用程式專案&lt;/u&gt;&lt;/font&gt;&lt;/h5&gt;  &lt;p&gt;當使用Visual Studio 2010開發工具開啟ASP.NET 2.0、ASP.NET 3.0或是ASP.NET 3.5所開發的網際網路應用程式專案時，就可以透過Visual Studio 2010開發工具直接將網際網路應用程式專案直接升級成ASP.NET 4.0版 – 這也是最建議的一種方式&lt;a href="file:///C:/Users/john_s_chang/Dropbox/For Dann/#_ftn1_4930" name="_ftnref1_4930"&gt;[1]&lt;/a&gt;。使用Visual Studio 2010開發工具升級ASP.NET專案時，Visual Studio 2010開發工具會自動協助你修改Web.Config檔案，並且將專案關連到.NET Framework 4.0執行環境。&lt;/p&gt;  &lt;p&gt;使用Visual Studio 2010開發工具升級ASP.NET應用程式的步驟相當的簡單。首先使用Visual Studio 2010開發工具開啟任何一個現有的ASP.NET網站或是應用程式專案，此時會出現如圖8「&lt;b&gt;Visual Studio&lt;/b&gt;&lt;b&gt;轉換精靈&lt;/b&gt;」的歡迎視窗：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TYhHvWviTpI/AAAAAAAAOlo/h3tZ7LtkdY8/s1600-h/pic01%5B14%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pic01" border="0" alt="pic01" src="http://lh6.ggpht.com/_pfobZznF9qw/TYhHwSfAMdI/AAAAAAAAOls/6qv_n3slmd8/pic01_thumb%5B14%5D.png?imgmax=800" width="453" height="399" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;圖8：「Visual Studio轉換精靈」&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;接著按下「&lt;b&gt;下一步&lt;/b&gt;」按鈕，會出現Visual Studio轉換精靈的備份對話方塊，如圖9所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TYhHxcY-YII/AAAAAAAAOlw/903M1stGe0Q/s1600-h/pic02%5B10%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pic02" border="0" alt="pic02" src="http://lh6.ggpht.com/_pfobZznF9qw/TYhHy98i0yI/AAAAAAAAOl0/5nOEN0BURBc/pic02_thumb%5B10%5D.png?imgmax=800" width="476" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;圖9：「選擇是否要建立備份」對話方塊&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;如果需要保留現有版本的專案或是解決方案複本，可以選擇「&lt;b&gt;是，轉換前建立備份&lt;/b&gt;」的項目。轉換完成之後，Visual Studio 2010開發工具會自動將現有的專案或是解決解決方案檔升級成Visual Studio 2010開發工具的格式。接著按下「&lt;b&gt;下一步&lt;/b&gt;」按鈕，會出現「&lt;b&gt;可以開始轉換&lt;/b&gt;」的對話方塊，如圖10所示：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TYhHzwDxfOI/AAAAAAAAOl4/NWqU_-Fz3vo/s1600-h/pic03%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pic03" border="0" alt="pic03" src="http://lh3.ggpht.com/_pfobZznF9qw/TYhH1t5E28I/AAAAAAAAOl8/hsKe0XO7Dms/pic03_thumb%5B9%5D.png?imgmax=800" width="548" height="482" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;圖10：「可以開始轉換」對話方塊&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;按下「&lt;b&gt;完成&lt;/b&gt;」按鈕之後，Visual Studio 2010開發工具就會開始轉換專案或是解決方案。轉換完成之後會出現「&lt;b&gt;轉換完成&lt;/b&gt;」的對話方塊(如圖11)：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TYhH2vzPyNI/AAAAAAAAOmA/63z38lRZRb0/s1600-h/pic04%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pic04" border="0" alt="pic04" src="http://lh5.ggpht.com/_pfobZznF9qw/TYhH4xCJmjI/AAAAAAAAOmE/hkmXcuAsh8g/pic04_thumb%5B9%5D.png?imgmax=800" width="513" height="451" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;圖11：「轉換完成」對話方塊&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;若是專案轉換不成功，你可以在關閉「&lt;b&gt;轉換完成&lt;/b&gt;」對話方塊前，選取「&lt;b&gt;關閉精靈時顯示轉換紀錄檔&lt;/b&gt;」，就可以檢視轉換失敗的原因。以ASP.NET網站來說，常見轉換失敗原因是因為目標網站的位置與解決方案檔中紀錄的位置不同，此時只需要在轉換完畢之後，重新將ASP.NET網站加入到解決方案檔中即可重新啟動轉換精靈，此時會看到如圖12的對話方塊，提醒你這一個ASP.NET網站即將升級成ASP.NET 4.0的網站：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TYhH6gWm_uI/AAAAAAAAOmI/cVCP7tyXw1E/s1600-h/pic05%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pic05" border="0" alt="pic05" src="http://lh3.ggpht.com/_pfobZznF9qw/TYhH96PPpTI/AAAAAAAAOmM/JlWcEKyrabE/pic05_thumb%5B9%5D.png?imgmax=800" width="682" height="236" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;圖12：升級ASP.NET網站的對話方塊&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;若是要讓Visual Studio 2010開發工具自動幫你升級網站，就按下「&lt;b&gt;是&lt;/b&gt;」按鈕。因為Visual Studio 2010開發工具支援多目標版本的ASP.NET網站編輯，因此若你只是要使用Visual Studio 2010開發工具繼續在原來的ASP.NET版本中維護網站，或是稍後才要手動升級ASP.NET網站的話，就按下「&lt;b&gt;否&lt;/b&gt;」按鈕。&lt;/p&gt;  &lt;p&gt;另外需要注意的就是，若是在你要升級的ASP.NET網站中有其他的ASP.NET應用程式需要繼續使用舊版的執行環境的話，可能也不適合使用自動升級。這是因為ASP.NET的組態設定檔會自動繼承到網站的子目錄中，某些ASP.NET 4.0新版本的設定沒辦法在舊的版本中使用，升級後可能會導致這些還沒升級的網站執行發生錯誤。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h5&gt;&lt;a name="_Ref288556976"&gt;&lt;font color="#000000" size="4"&gt;&lt;u&gt;升級ASP.NET&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#000000" size="4"&gt;&lt;u&gt;執行環境&lt;/u&gt;&lt;/font&gt;&lt;/h5&gt;  &lt;p&gt;使用Visual Studio 2010開發工具可以幫助你輕鬆快速地將ASP.NET網站或是應用程式升級成ASP.NET 4.0版本，接著也必須要升級在IIS的ASP.NET執行環境，以確保ASP.NET 4.0應用程式部署之後可以正確地執行。現有的IIS環境只需要下載並安裝.NET Framework 4.0之後，在應用程式集區中就會自動建立ASP.NET 4.0的應用程式集區(圖13)。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TYhH__YopKI/AAAAAAAAOmQ/8Cj6j6qCzlI/s1600-h/pic06%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pic06" border="0" alt="pic06" src="http://lh5.ggpht.com/_pfobZznF9qw/TYhICNGgnoI/AAAAAAAAOmU/kNp4Na-2yII/pic06_thumb%5B9%5D.png?imgmax=800" width="676" height="332" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;圖13：ASP.NET應用程式集區&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;而既有的ASP.NET應用程式集區，也可以透過手動的方式升級。只需要在IIS管理員當中開啟ASP.NET應用程式集區的進階設定之後，就可以透過修改.NET Framework版本的方式，將既有的ASP.NET應用程式集區升級成為ASP.NET 4.0的執行環境：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TYhIDmvQ_xI/AAAAAAAAOmY/s3zL3WzABZY/s1600-h/pic07%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="pic07" border="0" alt="pic07" src="http://lh6.ggpht.com/_pfobZznF9qw/TYhIGO11DAI/AAAAAAAAOmc/Pr0HfsandKY/pic07_thumb%5B9%5D.png?imgmax=800" width="517" height="487" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;圖14：設定ASP.NET 4.0應用程式集區&lt;/p&gt;  &lt;h5&gt;&amp;#160;&lt;/h5&gt;  &lt;h5&gt;&lt;a name="_Ref288556986"&gt;&lt;font color="#000000" size="4"&gt;&lt;u&gt;結語&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;/h5&gt;  &lt;p&gt;ASP.NET 4.0提供了許多開發新一代網際網路應用程式所需要的新功能，而透過Visual Studio 2010開發工具，不但可以將現有的ASP.NET應用程式快速升級到ASP.NET 4.0版開始使用這些新功能，如果有必要的話，也可以在同一個解決方案當中維護不同版本的ASP.NET應用程式，對於開發人員來說相當的方便，對企業來說，也可以減少升級ASP.NET程式所需要的維護成本。&lt;/p&gt;  &lt;hr align="left" size="1" width="33%" /&gt;  &lt;p&gt;&lt;a href="file:///C:/Users/john_s_chang/Dropbox/For Dann/#_ftnref1_4930" name="_ftn1_4930"&gt;[1]&lt;/a&gt; 因為Visual Studio 2010支援多目標版本(Multu-Target)，因此若是不想升級ASP.NET應用程式專案，還是可以使用Visual Studio 2010開發工具編輯與除錯現有的ASP.NET 2.0、ASP.NET 3.0與ASP.NET 3.5網際網路應用程式專案。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1429358041231810476?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1429358041231810476/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1429358041231810476' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1429358041231810476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1429358041231810476'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/03/aspnet.html' title='ASP.NET升級白皮書'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_pfobZznF9qw/TZAhTDAnmKI/AAAAAAAAOmk/bJW8Kv4BC1Q/s72-c/pic01_thumb%5B9%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7298576207226172624</id><published>2011-03-22T03:15:00.001+08:00</published><updated>2011-03-22T03:16:13.608+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT Pro要你知道的事'/><title type='text'>不要錢的無線網路 -- 最貴</title><content type='html'>&lt;p&gt;行動上網，目前已經成為一種趨勢。但是因為目前3G行動上網的費率仍然不便宜(至少對我來說是的)，因此很多人喜歡尋找周遭沒有設定安全限制 -- 通常就是不用錢的WiFi 存取點上網。然而，你的所有個人資訊，也就跟著暴露在網路世界當中。&lt;/p&gt;  &lt;p&gt;先請教各位，當你透過行動裝置開啟瀏覽器連上Facebook時，若是出現下面的情況，應該怎樣處理?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TYejlD1Z7uI/AAAAAAAAOkE/tSPweu3OVx4/s1600-h/image%5B44%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TYejmVwQKAI/AAAAAAAAOkI/TWEyqxVjOmA/image_thumb%5B30%5D.png?imgmax=800" width="765" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;我相信 85%以上的人，會馬上按下 &amp;quot;&lt;strong&gt;Continue to this website&lt;/strong&gt;&amp;quot;，然後繼續登入Facebook。網址沒有錯，瀏覽器也有啟用Https通信協定進行加密傳輸，有問題嗎?&lt;/p&gt;  &lt;p&gt;問題可大了! 在正常狀況之下，當瀏覽器與網站伺服器之間需要透過Https通信協定進行加密傳輸的時候，網站伺服器會提供網站的憑證資訊，讓瀏覽器可以知道這伺服器不是一個偽造的網路位置。以Facebook來說，當瀏覽器開啟 &lt;a href="https://www.facebook.com"&gt;Https://www.facebook.com&lt;/a&gt; 時，Facebook伺服器會提供瀏覽器下面的憑證資訊：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TYejnJ9r8vI/AAAAAAAAOkM/kNZB5yMpoWc/s1600-h/image%5B48%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TYejoBsQF4I/AAAAAAAAOkQ/qosdbUZKnt8/image_thumb%5B34%5D.png?imgmax=800" width="343" height="396" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;預設狀況之下，你所使用的瀏覽器都會預先設定信任比較多人使用的憑證簽發者，例如 Facebook的憑證簽發者 DigiCert就是預先信任的憑證授權單位 ：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TYejowuy2jI/AAAAAAAAOkU/ge4qQ24LrR4/s1600-h/image%5B51%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TYejp89Sn3I/AAAAAAAAOkY/lnFf7qNjyIQ/image_thumb%5B37%5D.png?imgmax=800" width="521" height="234" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;因為瀏覽器信任DigiCert，所以也就會信任DigiCert所核發給 &lt;a href="http://www.facebook.com"&gt;www.facebook.com&lt;/a&gt; 網址的憑證；所以在瀏覽器與Facebook的網站伺服器之間，就可以透過DigiCert所核發給Facebook網站的憑證，建立安全的加密傳輸通道：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TYejqvlSK3I/AAAAAAAAOkc/iToM8C1Hhfg/s1600-h/image%5B54%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TYejridsMfI/AAAAAAAAOkg/ggY8EVCtb_Q/image_thumb%5B40%5D.png?imgmax=800" width="470" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;所以在正常狀況之下，當你透過 Https 通信協定要開啟 Facebook 網站時，不應該出現任何的錯誤訊息才是。除非 … 你的瀏覽器所接收到的，並不是 DigiCert 所核發的憑證 !? &lt;/p&gt;  &lt;p&gt;沒錯!! 當你使用 WiFi 存取點上網時，你的行動裝置瀏覽器就會自動套用存取點的設定連接網路；若是有心人士想要偷取你在 Facebook 的相關資訊(登入帳號、密碼…)，只需要設定WiFi 存取點的代理憑證，原本要傳送到Facebook的加密資料，就會在 WiFi 存取點被解開，簡單的示意圖如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TYejsSlfeoI/AAAAAAAAOko/cTmAs42px3Y/s1600-h/image%5B57%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TYejtW4UjoI/AAAAAAAAOks/SBc617gOK3g/image_thumb%5B43%5D.png?imgmax=800" width="548" height="181" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;在這狀況之下，雖然瀏覽器看起來還是使用 Https 通信協定開啟Facebook，但是因為沒有安全警覺的使用者在一開始的畫面中，已經按下 &amp;quot;&lt;strong&gt;Continue to this website&lt;/strong&gt;&amp;quot;，信任了由 WiFi 存取點所提供的代理憑證(通常是WiFi 存取點自己發的)，因此瀏覽器要用來與Facebook網站之間加密傳輸所使用的Session Key，就會被WiFi 存取點所取得；如此一來，&lt;strong&gt;&lt;font color="#ff0000"&gt;WiFI 存取點就可以解開並錄製瀏覽器與Fackbook之間所加密傳輸的資料內容&lt;/font&gt;&lt;/strong&gt;。&lt;/p&gt;  &lt;p&gt;因此，&lt;strong&gt;&lt;font color="#ff0000"&gt;千萬不要以為，當你使用 Https 通信協定瀏覽網路，資料就一定是安全的!&lt;/font&gt;&lt;/strong&gt; 越來越多人喜歡透過行動裝置瀏覽網路，但是也越來越多人的帳號被盜用的原因之一，或許正是有心人正使用這種方式在竊取你的上網資訊。下次在外面上網，特別是使用免費的WiFi存取點時，請記得務必要多小心!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7298576207226172624?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7298576207226172624/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7298576207226172624' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7298576207226172624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7298576207226172624'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/03/blog-post.html' title='不要錢的無線網路 -- 最貴'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pfobZznF9qw/TYejmVwQKAI/AAAAAAAAOkI/TWEyqxVjOmA/s72-c/image_thumb%5B30%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-6100566744690513845</id><published>2011-01-31T02:14:00.001+08:00</published><updated>2011-02-01T01:05:48.165+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>網際網路應用程式中的預鑄工法–Silverlight 4</title><content type='html'>&lt;p&gt;在上個星期的研討會中，分享了很多個主題，其中有一個主題會後很多朋友都有興趣，那就是Silverlight 4技術的應用。很多人對於網際網路開發技術都會有很多誤解。先請問各位幾個問題：請問 HTML 5目前是W3C定義完成的標準嗎? 請問 CSS 3 目前是W3C定義完成的標準嗎? 請問未來的網際網路應用程式，還會是 &amp;quot;Thin-Client&amp;quot; 嗎?&lt;/p&gt;  &lt;p&gt;前兩個問題的標準答案都是：&lt;strong&gt;&lt;font color="#ff0000"&gt;否&lt;/font&gt;&lt;/strong&gt;。或許你會說，不是很多瀏覽器都說支援 HTML 5了嗎 ? 但事實上就是，W3C到目前為止，還沒定義完成最終版的 HTML 5 -- CSS 3 也是。像這些似是而非的資訊現在充斥在網路上，也常常誤導了許多開發團隊走了很多的冤枉路。&lt;/p&gt;  &lt;p&gt;從 3、4年前開始，我就在很多ASP.NET與Silverlight的技術研討會當中，說明了Silverlight其實是網際網路應用程式的開發技術，特別適合用來開發商業級應用程式，而非只是與 Flash player對抗的技術。事實上，Silverlight 4在商業級應用程式開發方面，無論是開發工具或是執行效能，都比Flash好太多了。而若是相較於JavaScript 而言，Silverlight 4 提供了更多資料繫結的方法以及更好的除錯工具，在前端瀏覽器中，可以創造出更多豐富的功能。以研討會中所舉的範例來說，透過Silverlight技術，你可以很容易的就在瀏覽器當中，與後端的服務建立TCP的繫結，讓前端的網頁可以即時更新氣象的資料(範例程式在&lt;a href="https://docs.google.com/leaf?id=0B7ogWwuOYS2zYjQzODRlNjktZjM4MC00OGY2LWE3MmQtZjRjNjVlMDQ0MWI1&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50"&gt;ASP.NET升級寶典&lt;/a&gt;中)。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TUbqwtNA8GI/AAAAAAAAOjo/7CcKuwn-JzQ/s1600-h/SilverlightNetTcp%5B11%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SilverlightNetTcp" border="0" alt="SilverlightNetTcp" src="http://lh6.ggpht.com/_pfobZznF9qw/TUbqxYLqXNI/AAAAAAAAOjs/0fktUPnEMKk/SilverlightNetTcp_thumb%5B9%5D.jpg?imgmax=800" width="434" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Silverlight 4也簡化了很多在瀏覽器中透過JavaScript無法做到或是很難做到的功能，像是與後端的服務做複雜的繫結，都可以很輕鬆地透過Visual Studio 2010開發工具完成 -- 而且很容易就可以測試與除錯，之後會再透過部落格跟各位再分享其他的範例，今天先來從開發架構上了解，Silverlight技術所帶來的改變。&lt;/p&gt;  &lt;p&gt;今天要談的所謂 &amp;quot;預鑄工法&amp;quot;，是目前建設大型建築物，像是高樓或是橋梁所普遍採用的技術，主要作法是將大型建築物複雜的部份先在外部工廠建造完成之後，將來運到工地之後就可以直接組裝，可以大大的縮短工作所需的時間。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TUbqzJZoR8I/AAAAAAAAOjw/XgM--57C8_s/s1600-h/image%5B3%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TUbq00_gKtI/AAAAAAAAOj4/4eSLhWz7Fk0/image_thumb%5B1%5D.png?imgmax=800" width="541" height="357" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; (圖片來源：&lt;a href="http://www.rsea.gov.tw/Report/1922news.htm"&gt;榮工處網站&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;因為Silverlight 4應用程式可以直接整合JavaScript，而且也可以直接從瀏覽器中存取不同位置的後端網路服務，因此當開發測試好Silverlight應用程式之後，就可以將Silverlight應用程式嵌入網頁中。因為大部分複雜的程式都已經包裝在Silverlight應用程式中了，因此就不需要再去撰寫或是維護一堆的JavaScript；換句話說，&lt;u&gt;JavaScript就變成了將Silverlight應用程式與網頁中的HTML元素繫結的工具&lt;/u&gt;，這就是我所謂的 &amp;quot;&lt;em&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;網際網路應用程式中的預鑄工法&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&amp;quot; -- 開發商業級應用程式的時候，將網頁中複雜的部份，像是需要顯示即時資料的圖表或是資料庫的繫結，直接透過Silverlight 4應用程式開發完成之後嵌入到網頁中，再透過JavaScript與網頁中的元素互動。如此一來就不需要在伺服器端維護其他網頁程式，既可以加速這些複雜功能執行的效能，也可以減少維護JavaScript所需要的成本。&lt;/p&gt;  &lt;p&gt;這一篇是一個楔子，後續將開始分享實際的做法。至於一開始最後一個問題的答案：當網頁中需要執行的程式越來越複雜，目前在用戶端執行時使用大量CPU資源或是GPU加速運算已經是常態。手機都要邁入雙核心時代了，你認為呢 ?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-6100566744690513845?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/6100566744690513845/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=6100566744690513845' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6100566744690513845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6100566744690513845'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/01/silverlight-4.html' title='網際網路應用程式中的預鑄工法–Silverlight 4'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/TUbqxYLqXNI/AAAAAAAAOjs/0fktUPnEMKk/s72-c/SilverlightNetTcp_thumb%5B9%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1492226660728144197</id><published>2011-01-28T23:23:00.001+08:00</published><updated>2011-01-28T23:23:05.090+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><title type='text'>ASP.NET與VS 2010升級實務</title><content type='html'>&lt;p&gt;本周四(01/27)受台灣微軟邀請，分享了在ASP.NET 4、Silverlight 4以及Visual Studio 2010開發工具的實務心得。下面是當天的講義連結：&lt;/p&gt;  &lt;p&gt;&lt;a href="https://docs.google.com/leaf?id=0B7ogWwuOYS2zZDFlMzYzMWMtZjRkZi00Y2M2LWEzMjUtMDIyMDgyNzM5ZGU4&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50" target="_blank"&gt;ASP.NET 與 Visual Studio 2010 升級實務&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://docs.google.com/leaf?id=0B7ogWwuOYS2zOWFlZjBhMzUtNzhiMC00OWJkLTkzYjAtNGQ5NTkyZThkNzdh&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50" target="_blank"&gt;提升ASP.NET網站的使用者經驗– Silverlight 4 的整合應用&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;另外，因為原本分享ASP.NET 升級寶典的網站負荷不了太大量的下載，所以我重新放了一個新的下載位置：&lt;/p&gt;  &lt;p&gt;&lt;a href="https://docs.google.com/leaf?id=0B7ogWwuOYS2zYjQzODRlNjktZjM4MC00OGY2LWE3MmQtZjRjNjVlMDQ0MWI1&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50" target="_blank"&gt;下載ASP.NET升級寶典&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;希望大家都可以趕快準備好你的Visual Studio 2010，開始練習使用Silverlight 4 加速你的企業級應用程式開發!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1492226660728144197?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1492226660728144197/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1492226660728144197' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1492226660728144197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1492226660728144197'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2011/01/aspnetvs-2010.html' title='ASP.NET與VS 2010升級實務'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2655687462121028723</id><published>2010-11-27T13:59:00.001+08:00</published><updated>2010-11-27T13:59:52.472+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><title type='text'>ASP.NET開發日簡報下載</title><content type='html'>&lt;p&gt;昨天在台灣微軟的會議廳跟許多朋友分享了有關ASP.NET 4以及Visual Studio 2010 在升級方面的一些實務，各位朋友可以透過下面的連結下載簡報：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://sites.google.com/a/silverlight.idv.tw/johnchang/technical/MSDN_ASP.NET4.pdf?attredirects=0&amp;amp;d=1"&gt;ASP.NET與Visual Studio 2010 升級實務&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://sites.google.com/a/silverlight.idv.tw/johnchang/technical/MSDN_ASP.NET4_2.pdf?attredirects=0&amp;amp;d=1"&gt;ASP.NET 4的新功能&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;昨天的場次中也為各位介紹了.NET Framework 4.0所提供的新功能，以及可以為您的應用程式所帶來的好處。當然，這些都必須要搭配Visaul Studio 2010開發在.NET Framework 4.0當中執行的應用程式，才可以使用這些新功能(如：平行運算)所帶來的好處。當然，搭配Visual Studio 2010對於&amp;quot;多目標.NET Framework&amp;quot;的支援，既有的ASP.NET應用程式也可以直接透過Visual Studio 2010 維護，不一定需要立即升級目前的ASP.NET應用程式。如果有需要升級既有的ASP.NET應用程式的話，Visual Studio 2010也提供了升級精靈，讓你可以快速地將ASP.NET應用程式升級到新的環境中，使用.NET Framework所提供的新功能!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2655687462121028723?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2655687462121028723/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2655687462121028723' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2655687462121028723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2655687462121028723'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/11/aspnet.html' title='ASP.NET開發日簡報下載'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4961689710647599692</id><published>2010-11-16T16:46:00.001+08:00</published><updated>2010-11-16T16:46:40.424+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>在多執行緒/平行運算中使用集合</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;.NET Framework 4.0 當中，其中一項很重要的特色，就是加入了對於平行運算的支援，讓你的應用程式可以發揮多核處理器的運算能力，甚至於搭配Windows HPC Server 2008 R2進行分散式運算。使用.NET Framework 4.0當中的Task Parallel Library，C#與VB.NET所建立的程式很容易就寫出在多核的環境中執行平行運算的程式。&lt;/p&gt;  &lt;p&gt;然而，在平行運算的的程式使用集合一向是個問題，因為在.NET Framework 4.0以前所提供的集合物件，都不是執行緒安全(thread-safe)的物件；換句話說，在平行運算的程式中使用，必須要透過特別的同步鎖定(synchronization)寫法，才可以正常的使用集合中的資料。&lt;/p&gt;  &lt;p&gt;這一個問題，.NET Framework 4.0 提供了解決的方式。在.NET Framework 4.0當中，加入了 &lt;strong&gt;&lt;font color="#ff0000"&gt;System.Collections.Concurrent&lt;/font&gt;&lt;/strong&gt; 命名空間，提供了許多可以使用在平行運算程式當中的執行緒安全(thread-safe)集合類別，包括了：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;BlockingCollection &lt;/li&gt;    &lt;li&gt;ConcurrentBag &lt;/li&gt;    &lt;li&gt;ConcurrentDictionary &lt;/li&gt;    &lt;li&gt;ConcurrentQueue &lt;/li&gt;    &lt;li&gt;ConcurrentStack &lt;/li&gt;    &lt;li&gt;OrderablePartitioner &lt;/li&gt;    &lt;li&gt;Partitioner      &lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;在支援平行運算的程式碼當中，只需要將原本使用的集合換成新的集合就可以了。例如原本的程式碼：&lt;/p&gt;  &lt;p&gt;pulblic class MyData{&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;public &lt;font color="#ff0000"&gt;&lt;strong&gt;List&lt;/strong&gt;&lt;/font&gt;&amp;lt;byte[]&amp;gt; Data {get; set;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;因為 List集合物件不支援執行緒安全，因此當你將MyData物件直接在平行運算的程式中使用，並且沒有特別同步鎖定的話，可能會出現下面的錯誤：&lt;/p&gt;  &lt;p&gt;&lt;em&gt;System.IndexOutOfRangeException: Index was outside the bounds of the array.     &lt;br /&gt;&amp;#160;&amp;#160; at System.Collections.Generic.List`1.Enumerator.MoveNext()&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;而在.NET Framework 4.0 的程式當中，你可以將 List集合換成 BlockingCollection集合物件：&lt;/p&gt;  &lt;p&gt;pulblic class MyData{&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;public &lt;font color="#ff0000"&gt;&lt;strong&gt;BlockingCollection&lt;/strong&gt;&lt;/font&gt;&amp;lt;byte[]&amp;gt; Data {get; set;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;因為 BlockingCollection物件本身就支援執行緒安全，因此直接將BlockingCollection物件使用在平行運算的程式碼當中，就不會有前述的錯誤發生!!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4961689710647599692?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4961689710647599692/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4961689710647599692' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4961689710647599692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4961689710647599692'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/11/blog-post.html' title='在多執行緒/平行運算中使用集合'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-3916270124456861427</id><published>2010-11-15T17:36:00.001+08:00</published><updated>2010-11-15T17:36:35.520+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>在PHP程式中使用Windows驗證</title><content type='html'>&lt;p&gt;在IIS 7.5當中，可以使用&amp;quot; Windows Platform Installer” 工具，安裝支援PHP的延伸模組之後，就可以在IIS上執行PHP應用程式了。當然，此時你就可以使用IIS或是ASP.NET的Membership，建立PHP應用程式所需要的使用者驗證功能。在這裡我先介紹最簡單的WIndows驗證的作法。&lt;/p&gt;  &lt;p&gt;Windows驗證在ASP或是ASP.NET的應用程式中，是驗證企業內部網域使用者最簡單的方法；同時使用者在支援Windows驗證的不同Web應用程式間切換時，也不需要再重新登入，對使用者來說也是相當的方便。若是要在裝載在IIS 7.x上執行的PHP應用程式當中使用Windows驗證，首先你必須要開啟PHP應用程式目錄的Windows驗證功能：&lt;/p&gt;  &lt;p&gt;1. 用滑鼠雙擊應用程式目錄的Authentication(驗證)設定。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TOD_DXZ9omI/AAAAAAAAOhY/HQ0yjPeLkFY/s1600-h/image%5B6%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TOD_EK1kH5I/AAAAAAAAOhc/24X3GpPM_cE/image_thumb%5B4%5D.png?imgmax=800" width="502" height="376" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. 取消匿名驗證(標示 1)，並且啟用Windows驗證(標示 2)：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TOD_Ehg1zhI/AAAAAAAAOhg/0aeQn9c6GO8/s1600-h/image%5B18%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TOD_FYD1BXI/AAAAAAAAOhk/Wtm15O-lzOo/image_thumb%5B14%5D.png?imgmax=800" width="476" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;完成之後，將來所有來自用戶端的HTTP要求，IIS就會使用網域帳號驗證使用者；驗證成功之後，使用者的Window網域帳號就會被自動寫入 &amp;quot;LOGON_USER&amp;quot; 的Server變數當中。而在PHP應用程式中，只需要透過下面的程式碼，就可以取出驗證過的使用者帳號：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TOD_HZezO3I/AAAAAAAAOho/o1RUMr9ai6U/s1600-h/image%5B27%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TOD_IvWtSPI/AAAAAAAAOhs/ODKCves7_Gk/image_thumb%5B21%5D.png?imgmax=800" width="281" height="100" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;除此之外，也可以結合ASP.NET的Forms驗證檢查使用者身分，或是透過URL方式進行授權。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-3916270124456861427?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/3916270124456861427/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=3916270124456861427' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3916270124456861427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3916270124456861427'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/11/phpwindows.html' title='在PHP程式中使用Windows驗證'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pfobZznF9qw/TOD_EK1kH5I/AAAAAAAAOhc/24X3GpPM_cE/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-6609291532168602054</id><published>2010-11-12T16:52:00.001+08:00</published><updated>2010-11-12T16:52:39.749+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='Caching'/><title type='text'>加入AppFabric Cache Cluster 發生錯誤</title><content type='html'>&lt;p&gt;當透過AppFabric設定工具，要將目前機器加入已經存在的快取叢集時，若是出現下面的錯誤訊息：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TN0AQ1AualI/AAAAAAAAOhQ/J4rA7VaMsTA/s1600-h/image%5B8%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TN0AR7-eiWI/AAAAAAAAOhU/skUxAkAleds/image_thumb%5B6%5D.png?imgmax=800" width="718" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;錯誤發生的原因，就是在 &amp;quot;C:\Windows\System32\AppFabric\DistributedCacheService.exe.config&amp;quot; 檔案中，&amp;lt;clusterConfig&amp;gt;標籤中沒有正確的資料。解決的方式，可以從任一台叢集中的機器中，開啟這一個檔案之後，再將資料複製到config檔案之後，再重新執行AppFabric設定工具就可以了。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-6609291532168602054?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/6609291532168602054/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=6609291532168602054' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6609291532168602054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6609291532168602054'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/11/appfabric-cache-cluster.html' title='加入AppFabric Cache Cluster 發生錯誤'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pfobZznF9qw/TN0AR7-eiWI/AAAAAAAAOhU/skUxAkAleds/s72-c/image_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4214850743193809086</id><published>2010-11-11T23:32:00.001+08:00</published><updated>2010-11-12T12:07:45.599+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>建構私有雲叢集運算核心–Windows HPC Server 2008 R2</title><content type='html'>&lt;p&gt;雖然最近相當忙，但是發現技術的東西用過之後如果沒有記錄一下，很快就會忘記了。&lt;/p&gt;  &lt;p&gt;雲端運算是最近相當熱門的題材，為了讓無法自行建置雲端平台的新興網路產業，以及希望降低公有雲TOC的企業，微軟提供了Windows Azure，讓需要企業可以隨時調配所需要的公有雲架構。然而，在企業當中，還是有需要可以將一些內部的企業級應用程式，建置在企業內私有雲端執行的需求。&lt;/p&gt;  &lt;p&gt;Windows High Performance Computing (HPC) Server 2008 R2 是微軟叢集運算的核心，搭配.NET Framework 4.0 所提供的TPL(Task Parallel Library)，你就可以將C#或是VB.NET所建立的WCF服務，進行分散式的運算；而像是ETL、Data Mining等需要大量運算資源的Job，也可以透過HPC Cluster的Head Node進行分散式運算，並且還可以監控每台機器的執行狀況，產生報表。再加上Windows Server AppFabric Caching 的分散式快取，其實要建立企業內私有雲平台並不難。下面是Windows HPC Server 2008 R2的叢集運算基本架構：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TNwMigma0ZI/AAAAAAAAOhA/2fLMtYh6S2s/s1600-h/ClusterComputing%5B2%5D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ClusterComputing" border="0" alt="ClusterComputing" src="http://lh6.ggpht.com/_pfobZznF9qw/TNwMjrkLlnI/AAAAAAAAOhI/M52ydR1MBh8/ClusterComputing_thumb%5B7%5D.jpg?imgmax=800" width="642" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Windows HPC Server 不是新的作業系統，而是架構在Windows Server 2008 R2 64 位元作業系統上面的叢集運算服務，由下面幾個基本的角色構成：&lt;/p&gt;  &lt;p&gt;1. Head Node：負責集中管理與分派工作(Job)的節點，透過SQL Server資料庫紀錄工作與執行狀態。&lt;/p&gt;  &lt;p&gt;2. WCF Broker Node：負責裝載WCF服務，並且將用戶端要求傳送到叢集中運算，回傳結果。&lt;/p&gt;  &lt;p&gt;3. Compute Node：負責運算的節點，可以是Windows Server或是Windows 7的工作站。&lt;/p&gt;  &lt;p&gt;設定Job的時候可以指定需要使用多少運算的資源：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TNwMkckNQbI/AAAAAAAAOgk/kRsg1gZj_64/s1600-h/image%5B11%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TNwMlh_KkdI/AAAAAAAAOgo/ZM45vXgooSA/image_thumb%5B9%5D.png?imgmax=800" width="519" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TNwMmQNlzdI/AAAAAAAAOgs/fpplbFK-nUk/s1600-h/image%5B22%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TNwMnUWHVYI/AAAAAAAAOgw/xxPAYlkCcGM/image_thumb%5B18%5D.png?imgmax=800" width="529" height="584" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;但需要注意的是，若是要發揮叢集運算的最佳效果，程式在撰寫的時候，就必須要把平行運算的設計考量，加入到程式碼當中。關於.NET Framework 4.0的平行運算是一個很大的課題，有時間再慢慢分享。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4214850743193809086?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4214850743193809086/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4214850743193809086' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4214850743193809086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4214850743193809086'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/11/windows-hpc-server-2008-r2.html' title='建構私有雲叢集運算核心–Windows HPC Server 2008 R2'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/TNwMjrkLlnI/AAAAAAAAOhI/M52ydR1MBh8/s72-c/ClusterComputing_thumb%5B7%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-5361741247315094342</id><published>2010-11-08T14:32:00.001+08:00</published><updated>2010-11-08T14:42:32.546+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><title type='text'>該怎樣看待HTML 5?</title><content type='html'>&lt;p&gt;今年TechDays 之後，有很多朋友詢問我有關於是不是需要等 HTML 5標準的問題。我先跟大家分享一個身邊的故事：&lt;/p&gt;  &lt;p&gt;我有一位好朋友，幾年以來，一直想在台北市買間房子。他跟我說，希望可以找一間室內有35坪以上，總價兩千萬以下的房子。其實這條件並不會太難找，但是找到的都是中古屋，要不然就是交通比較不方便的區域，所以他就不考慮了；再加上常常會有房價泡沫化的新聞，於是乎迄今，屬於他的房子還不知道在哪裡 -- 即便是他有兩千萬的預算…&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;HTML 5 從2007年開始制定到現在&lt;/font&gt;，一直被視為下一代網際網路的一個重要標準；然而到現在為止，也&lt;font color="#ff0000"&gt;還在 &amp;quot;Working Draft&amp;quot;的階段，&amp;quot;最快&amp;quot; 應該也是明年六月以後才有機會變成 &amp;quot;Recommandation&amp;quot; 的標準(&lt;/font&gt;很樂觀的看法)。而備受爭議的CSS 3，則可能會需要再拖一陣子。在現在這標準還是曖昧不明的階段，Chrome、Safari等不同的瀏覽器廠商，為了搶瀏覽器的市場，也舉辦許多的研討會，每家都試圖證明自己是HTML 5的領導廠商。更甚者，希望讓IT人員相信，只有HTML 5才是下一代Rich Internet Application的唯一標準。&lt;/p&gt;  &lt;p&gt;我在五月份的文章中，已經把HTML 5發展的可能做了一些分析；在 IE 9 Beta1釋出之後，情勢又更加的明顯。微軟從2007年，也就是大約是 HTML 5標準開始發想的時間，就推出了Silverlight 1.0版。在Silverlight 1.x中，微軟就已經試著使用 XAML標籤，來描述網頁中動畫、影片、聲音等等，與使用者互動的技術，再透過JavaScript控制這些網頁中的物件，建立RIA應用程式。但是也就是為了要讓 XAML標籤所設計的使用者操作介面可以在不同的環境中(特別是未來的行動裝置)，不受瀏覽器與JavaScript引擎的影響，而可以有一致的效果，因此從Silverlight 2.0開始，Silverlight就轉變為現今的架構。而&lt;font color="#ff0000"&gt;從2007年迄今，Silverlight也已經&lt;strong&gt;&lt;u&gt;根據實際應用的需求，進化了四個版本&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;；如果從這樣的經驗來看， HTML 5 的標準就算在制定完成之後，也還有一段長路要走…&lt;/p&gt;  &lt;p&gt;另外，若是要讓 RIA應用程式可以在不同的瀏覽器中可以有一致的效果，瀏覽器本身除了需要有很好的JavaScript執行引擎之外，更需要與作業系統有更緊密的結合，才能善用圖形加速的功能(GPU、DirectX…)去呈現網頁。在我TechDays 2010的demo當中(&lt;a title="http://ie.microsoft.com/testdrive/Performance/PsychedelicBrowsing/Default.html" href="http://ie.microsoft.com/testdrive/Performance/PsychedelicBrowsing/Default.html"&gt;http://ie.microsoft.com/testdrive/Performance/PsychedelicBrowsing/Default.html&lt;/a&gt;)，其實就可以看出有支援GPU加速的 IE 9 Beta 1，在執行HTML 5的網頁時，效果就比Chrome(7.0.517.44)好上很多。當然，現在離HTML 5的標準制定完成至少還有半年以上的時間(很樂觀的看法)，瀏覽器廠商都還有進步的時間與空間。但在這些問題都還沒有解決或是最佳化之前，使用HTML 5開發出來的網頁對於使用者來說，不會有太多的感覺。當然，對於瀏覽器廠商來說，若是 IE 9在執行大部分的HTML 5網頁時的速度與效果都比Chrome或是Safari好的話，自然市占率就會增加 -- 然而&lt;font color="#ff0000"&gt;在 HTML 5標準確定之前，目前所有 &amp;quot;號稱&amp;quot;支援HTML 5 的瀏覽器，也都沒有支援全部的功能&lt;/font&gt;(&lt;a title="http://www.w3.org/QA/2010/09/how_do_we_test_a_web_browser_o.html" href="http://www.w3.org/QA/2010/09/how_do_we_test_a_web_browser_o.html"&gt;http://www.w3.org/QA/2010/09/how_do_we_test_a_web_browser_o.html&lt;/a&gt;)，自然對於使用者來說，也沒辦法帶來好處。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TNebjv2AggI/AAAAAAAAOgA/jOq6KtHe5vk/s1600-h/image%5B7%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TNeblZ4tH7I/AAAAAAAAOgE/ZjcC0rvFLLo/image_thumb%5B3%5D.png?imgmax=800" width="244" height="147" /&gt;&lt;/a&gt;&amp;#160;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TNebmtSiSYI/AAAAAAAAOgI/_-2U4oKQWNc/s1600-h/image%5B5%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TNeboJxUQpI/AAAAAAAAOgM/-uHgSXZZoXo/image_thumb%5B1%5D.png?imgmax=800" width="244" height="147" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;(差很大的使用者操作經驗…)&lt;/p&gt;  &lt;p&gt;HTML 5 會一統江湖嗎? 從幾個地方來看：&lt;/p&gt;  &lt;p&gt;1. &lt;font color="#ff0000"&gt;大部分的HTML 5的規格，都是參考自2007年迄今，RIA應用程式技術(Flash、Silverlight)現有的功能所制定的&lt;/font&gt;。然而應用程式的發展日新月異，參考現在的需求所制訂出來的規格，通常是無法滿足未來的需求。換句話說，在環境變化多樣性的網際網路平台中，HTML 5 應該是繼續扮演目前的角色，做為Web基礎的框架；而各種 RIA的技術，包括Silverlight以及未來的其他裝置，勢必會繼續發展滿足未來使用者需求的功能；而HTML 5標準所無法支援的環境，則應該依然是可以透過plug-in的方式，執行在瀏覽器中。&lt;/p&gt;  &lt;p&gt;2. 根據這幾年來Silverlight的發展經驗來看，未來&lt;font color="#ff0000"&gt;HTML 5應該會發展成為設計工具間，轉換使用者操作介面的一種標準。&lt;/font&gt;每一種不同的UI 技術都會有各自的profile，如同MDA(Model Driven Architectur)當中 PIM(Platform Independent Model)到PSM (Platform Specific Model)的過程一樣，&lt;font color="#000000"&gt;設計人員可以先使用工具設計好一個通用的模型之後，再套上不同執行環境所需要的profile，就可以轉換成所需要的使用者操作介面&lt;/font&gt;。&lt;/p&gt;  &lt;p&gt;會需要這樣做的原因是，未來可以上網的裝置越來越多，需求也會不同，&lt;font color="#ff0000"&gt;要讓RIA應用程式在這些裝置中都有良好的操作經驗，就不可能都靠瀏覽器去執行這些程式&lt;/font&gt;。換句話說，除非裝置本身的作業系統就是最佳化過的瀏覽器(Chrom OS ?)，否則會有越來越多的RIA應用程式需要支援於瀏覽器外執行。此時不同的裝置，設計工具就可以透過不同的profile，轉換成各自支援的UI標準 (類似MDA當中的PIM-&amp;gt;PSM)，開發人員再透過 MVVM 等開發模式，就可以快速的將使用者操作介面與程式結合，轉換成在不同裝置中執行的應用程式。&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;我們需要等 HTML 5嗎? 不需要!&lt;/font&gt; 就像買房子一樣，有現在就已經成熟的技術可以解決問題，為什麼要等以後不確定能做到多少的標準? 在未來，Silverlight技術將會繼續演進，支援更多裝置與平台；而同時，HTML 5無法滿足的部分，也繼續會有新的技術會出現，請問你還可以等多久???&lt;/p&gt;  &lt;p&gt;參考資料：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w3.org/TR/#tr_HTML"&gt;W3C Statndards and Drafts&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.w3.org/QA/2010/09/html5_getting_to_last_call.html"&gt;HTML 5: Getting to Last Call&lt;/a&gt;&lt;/p&gt;  &lt;h5&gt;&lt;a href="http://john-publish.blogspot.com/2010/05/html-5-css-3-flash-silverlight.html"&gt;HTML 5+ CSS 3 會殺了Flash 跟Silverlight ?&lt;/a&gt;&lt;/h5&gt;  &lt;h5&gt;&lt;a href="http://john-publish.blogspot.com/2010/05/html-5-css-3-flash-silverlight-2.html"&gt;HTML 5+ CSS 3 會殺了Flash 跟Silverlight ? -2&lt;/a&gt;&lt;/h5&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-5361741247315094342?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/5361741247315094342/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=5361741247315094342' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5361741247315094342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5361741247315094342'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/11/html-5.html' title='該怎樣看待HTML 5?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/TNeblZ4tH7I/AAAAAAAAOgE/ZjcC0rvFLLo/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2802888081229130175</id><published>2010-09-27T15:15:00.001+08:00</published><updated>2010-09-27T15:29:28.624+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Windows Server AppFabric Caching (3) - 與資料庫存取在效能方面的比較</title><content type='html'>&lt;p&gt;在利用Windows Server AppFabric Caching，建立大量資料存取的系統時，Windows Server AppFabric可以大大的減輕系統存取資料庫時所造成的I/O負擔，同時其Key-Value的存取方式也讓程式可以透過Key值直接取得所需要的物件，不需要花時間建立資料連線。下面分享一個實際的測試結果：&lt;/p&gt;  &lt;p&gt;在這一個測試當中，我將4000萬筆資料從資料表搬到Cache當中儲存，再與資料庫查詢同一筆資料的結果作比較；資料庫與Cache Server都在美國的Data Center中。在&lt;strong&gt;&lt;u&gt;沒有啟用Local Cache功能&lt;/u&gt;&lt;/strong&gt;時，第一次查詢資料的結果為:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TKBEhJntImI/AAAAAAAAOew/dG-H7r3j53c/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TKBEh5QnTwI/AAAAAAAAOe0/vbCh0Hc4M-4/image_thumb%5B5%5D.png?imgmax=800" width="292" height="81" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;相同的條件再執行一次，結果為：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TKBEiiKcurI/AAAAAAAAOe4/3DAf62CJQk4/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TKBEjQ28mNI/AAAAAAAAOe8/54I-zOZ5yUU/image_thumb%5B13%5D.png?imgmax=800" width="296" height="76" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;從結果可以看出，使用&lt;strong&gt;資料庫查詢在第一次建立資料連線時，需要耗費相當的時間&lt;/strong&gt;；而當&lt;strong&gt;&lt;font color="#ff0000"&gt;資料連線建立完成之後，後續的存取時間使用Cache或是使用資料庫其實差異不大&lt;/font&gt;&lt;/strong&gt;。但就如同一開始所說的，使用Cache可以減輕資料庫I/O的負擔，這對於我們一天有幾十GB資料要新增的系統來說，有相當的幫助。&lt;/p&gt;  &lt;p&gt;接下來，我們&lt;strong&gt;&lt;u&gt;啟用LocalCache之後，再重新測試一次&lt;/u&gt;&lt;/strong&gt;：應用程式第一次查詢資料的結果和之前差不多：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TKBEj8AhElI/AAAAAAAAOfA/pP8yPo_FAaY/s1600-h/image%5B23%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TKBEknv_xgI/AAAAAAAAOfE/C6zpAIVM-6E/image_thumb%5B17%5D.png?imgmax=800" width="279" height="77" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(請想想，相對於對第一次資料庫存取而言，為何這一次快了一倍? )&lt;/p&gt;  &lt;p&gt;相同的條件再執行一次，結果為：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TKBElHoGPPI/AAAAAAAAOfQ/Qh6Cvl8GkCk/s1600-h/image%5B29%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TKBEltSxF3I/AAAAAAAAOfY/LC6dAdIjfdg/image_thumb%5B21%5D.png?imgmax=800" width="288" height="81" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;0 毫秒!! &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;對於大量提供資料的應用程式而言，Windows Server AppFabric Caching 除了可以減輕資料庫的負擔之外，當&lt;strong&gt;&lt;font color="#ff0000"&gt;啟用LocalCache之後，AppFabric Caching會自動將使用過的物件快取在應用程式當中&lt;/font&gt;&lt;/strong&gt;，當下次要再使用相同的物件時，就不需要再從Cache Layer當中去存取物件，因此&lt;u&gt;幾乎是即時就可以取得資料&lt;/u&gt;!!&lt;/p&gt;  &lt;p&gt;但需要注意的是，雖然Cache可以讓我們在近乎即時的狀況之下使用物件，但是在設計上，Key-Value相對於關聯式資料庫而言，是完全不同的效果，同時資源的消耗上也是完全不同的。下次，再來談設計上的考量…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2802888081229130175?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2802888081229130175/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2802888081229130175' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2802888081229130175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2802888081229130175'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/09/windows-server-appfabric-caching-3.html' title='Windows Server AppFabric Caching (3) - 與資料庫存取在效能方面的比較'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pfobZznF9qw/TKBEh5QnTwI/AAAAAAAAOe0/vbCh0Hc4M-4/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-5324245654398767199</id><published>2010-09-15T00:55:00.001+08:00</published><updated>2010-09-15T02:06:34.576+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>如何結合網域帳戶，自訂ASP.NET應用程式授權</title><content type='html'>&lt;p&gt;預設在ASP.NET應用程式當中，支援兩種驗證模式：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows 驗證：利用IIS驗證使用者的Windows帳戶，然後存取ASP.NET應用程式。 &lt;/li&gt;    &lt;li&gt;Forms驗證：利用ASP.NET當中自訂的登入表單，搭配MemberShip資料庫驗證使用者身分。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;在企業內部，比較常用到的，應該會是Windows驗證，因為如此一來，使用者就不需要為了存取不同的ASP.NET應用程式，而重複進行登入的動作。然而，因為Windows驗證預設必須要搭配使用者的Windows群組資訊來授權，為了管理使用者在不同的應用程式中不同的執行權利，往往必須要在AD當中建立不同的群組；同時IT管理人員也必須要常常隨著使用者的升遷或是轉換部門，而調整使用者AD的群組狀態。&lt;/p&gt;  &lt;p&gt;另一個問題是，擁有(管理)應用程式的部門，也通常不是管理AD的IT單位，因此若是要在應用程式當中建立新的群組授權，就必須要知會其他單位，不僅不方便，協調與溝通若是出錯的話，對於使用者也會是一大困擾。&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;quot;何不就讓使用者透過Windows帳號登入ASP.NET應用程式，然後再由ASP.NET應用程式自行針對Windows帳號授權 ?&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;解決之道，就是結合Windows驗證與Forms驗證，讓企業內部的使用者可以透過Windows帳號登入ASP.NET應用程式之後，再使用MemberShip資料庫的資料進行授權。這樣使用者一樣可以使用Windows帳號存取應用程式，同時每個ASP.NET應用程式的管理人員也可以自己管理使用者的登入與授權的權利。。[筆者按：這不是微軟建議的標準使用方式，ASP.NET的課程也不會這樣教]&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TI-o44EEDNI/AAAAAAAAOdw/YPbEXyCuNlc/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TI-o5gNjtVI/AAAAAAAAOd0/Edd9YGQj5Qw/image_thumb%5B6%5D.png?imgmax=800" width="472" height="275" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;請參考上面的概念圖，當每個Http Request傳送到Web Server時，會先被IIS攔截，並且根據Web應用程式目錄設定的驗證模式驗證使用者(標示 1)；有了存取Web應用程式目錄的權限之後，Http要求才會被送到ASP.NET應用程式當中。一般若是要使用ASP.NET的Forms驗證模式的話，通常IIS的應用程式目錄會設定 &amp;quot;匿名驗證 &amp;quot; (標示 1)，再由ASP.NET自訂的Login表單與MemberShip資料庫進行驗證授權(標示 2)。&lt;/p&gt;  &lt;p&gt;了解了ASP.NET與IIS的驗證/授權概念之後，要結合網域帳戶，自訂ASP.NET應用程式授權的工作其實相當簡單，我們只需要在Web應用程式目錄啟用Windows驗證模式(標示 1)，再將Windows使用者帳號設定到MemeberShip資料庫中，就可以直接在ASP.NET應用程式當中根據該Windows帳號進行授權(標示 2)。操作步驟如下：&lt;/p&gt;  &lt;p&gt;1. 首先，在IIS上先啟用 &amp;quot;Windows 驗證&amp;quot;，由IIS驗證使用者的Windows帳號&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TI-o6YmxYVI/AAAAAAAAOd4/lxA_Ha50YHQ/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TI-o7MgLZWI/AAAAAAAAOd8/9BIfUINuAUM/image_thumb%5B8%5D.png?imgmax=800" width="486" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. 在 ASP.NET應用程式的web.config檔中，設定啟用Forms驗證，同時排除匿名使用者：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TI-o7uz3-PI/AAAAAAAAOeA/KOVvd0ppP1c/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TI-o8LTgxZI/AAAAAAAAOeE/7K3LGt48zPw/image_thumb%5B10%5D.png?imgmax=800" width="496" height="165" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. 在Login表單的程式碼當中，先透過 &amp;quot;Request.LogonUserIdentity.Name&amp;quot; 屬性，取出IIS所驗證的使用者Windows帳號，再送到MemberShip資料庫當中比對。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TI-o84o2u6I/AAAAAAAAOeY/NHfDC5gZxXY/s1600-h/image%5B31%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TI-o9mbR18I/AAAAAAAAOec/9P2wi0SEC2k/image_thumb%5B21%5D.png?imgmax=800" width="588" height="218" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;如此一來，你只要將可以存取ASP.NET應用程式的使用者Windows帳號名稱，透過程式或是管理介面加入MemberShip資料庫當中，再設定該Windows帳號在ASP.NET應用程式當中所屬的群組，就不需要到AD當中去設定群組資訊了!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TI-5p_hR1EI/AAAAAAAAOeo/3ZJIpwg0gdg/s1600-h/image%5B13%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TI-5qV_QwlI/AAAAAAAAOes/BmAYr9lahgs/image_thumb%5B8%5D.png?imgmax=800" width="644" height="130" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;4. 最後，在需要檢查授權的程式碼中，只需要透過 &amp;quot;User.IsInRole&amp;quot; 方法，就可以檢查該Windows使用者帳號在ASP.NET應用程式當中，是否屬於已被授權的群組：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TI-o-Kn1eqI/AAAAAAAAOeQ/iW0uE29rEcw/s1600-h/image%5B24%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TI-o-8cFApI/AAAAAAAAOeU/NZtiH8_0Qk0/image_thumb%5B14%5D.png?imgmax=800" width="470" height="176" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;透過這種方式，在企業內部的ASP.NET應用程式，就可以自行管理Windows使用者帳號的存取權限，而不需要透過AD的群組了….&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-5324245654398767199?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/5324245654398767199/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=5324245654398767199' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5324245654398767199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5324245654398767199'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/09/aspnet.html' title='如何結合網域帳戶，自訂ASP.NET應用程式授權'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pfobZznF9qw/TI-o5gNjtVI/AAAAAAAAOd0/Edd9YGQj5Qw/s72-c/image_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4483189869900874862</id><published>2010-07-18T03:24:00.001+08:00</published><updated>2010-07-20T00:06:05.184+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='我的書'/><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><title type='text'>如何學習UML ?</title><content type='html'>&lt;p&gt;最近，或許是跟微軟一直在倡導跟軟體品質、軟體生命週期有關的一些理論有關，很多朋友都對UML(Unified Modeling Language)有興趣，也來跟我討論了一些問題。比較有趣的是，這些朋友大多&lt;u&gt;上過一些UML的課，卻還是不清楚，究竟要怎樣將UML應用在實務上&lt;/u&gt;。還有一些書籍，自己創造了一些翻譯的名詞(Use case diagram –&amp;gt; 用例圖 ??)，讓想好好學UML的人一開始接觸就一頭霧水…&lt;/p&gt;  &lt;p&gt;如何學習UML，必須要先從 &amp;quot;你希望UML可以為你做甚麼 ?&amp;quot; 開始看起。UML 大致上分成兩個部分：Notation 與 Metadata。所謂的Notation，指的就是在繪製UML圖表的時候，所使用的 &amp;quot;標記&amp;quot;，像是最簡單的Actor (動作項目)：&lt;/p&gt;  &lt;p&gt;&lt;img alt="Actor Notation" src="http://www.tutorialspoint.com/images/notation_actor.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;而在UML的定義中，所有的Notation都有特定的Attributes，彼此之間也都有特別的關連與限制，這些就是在UML模型後面的Metadata。然而，&lt;font color="#ff0000"&gt;&lt;strong&gt;對於90%以上的UML使用者來說，學會正確的使用Notation表達系統的設計，會比去搞懂Metadata來得重要&lt;/strong&gt;&lt;/font&gt;。Metadata主要是給研究UML的大師們討論，以及開發UML工具的廠商使用的；對於一般使用者而言，深入了解像是”Classifier”的定義為何，不會是學習UML的重點。&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;quot;我該使用甚麼工具好 ?&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;自從UML被神化之後，很多人一開始接觸UML，就開始先比較這個工具支援多少種UML模型圖、可不可以產生程式碼或是反向工程等等的課題 ---- 忽略掉原本UML的初衷，是要用來幫助專案開發團隊溝通的一種模型。&lt;/p&gt;  &lt;p&gt;理論上，UML模型是系統的藍圖，藍圖做好了，根據藍圖來產生程式碼，應該是沒有太大問題。但就像是建築學發展了幾千年，到目前為止，藍圖畫好了，也沒有辦法直接變成大樓一樣；&lt;strong&gt;&lt;font color="#ff0000"&gt;你永遠不要期望任何UML工具，可以在模型建置好之後，可以直接建立系統出來&lt;/font&gt;&lt;/strong&gt;。就算你所使用的工具有這樣的能力，但是在這個很多PM連使用案例圖(Use case diagram)都畫不好的情況下，你又如何能確保你的模型是完整的 ?&lt;/p&gt;  &lt;p&gt;雖然在UML 2當中，定義了十多種的圖形，然而在實務上，通常使用其中的4、5種模型圖就可以將系統描述得很清楚。若是各位有興趣學習UML，請記得&lt;strong&gt;&lt;font color="#ff0000"&gt;學習如何建立基本的UML模型圖，遠比學習UML工具來的重要&lt;/font&gt;&lt;/strong&gt; -- 沒有人規定不可以用小畫家繪製UML模型圖，不是嗎 ?&lt;/p&gt;  &lt;p&gt;因此，&lt;font color="#ff0000"&gt;&lt;strong&gt;要學習UML，只需要使用容易上手，具親合力的工具即可&lt;/strong&gt;&lt;/font&gt;。簡單、容易上手的工具，可以讓UML更容易導入專案當中；而過於複雜的工具，雖然看起來很厲害，但往往因為加了太多東西而導致不容易使用，反而增加專案與開發團隊的困擾…&lt;/p&gt;  &lt;p&gt;另外，因為&lt;font color="#ff0000"&gt;&lt;strong&gt;UML模型不可能脫離系統文件與專案的程式而獨立存在&lt;/strong&gt;&lt;/font&gt;，因此你所選用的UML模型工具，最好還要支援專案團隊所使用的專案管理平台(ex: Team Foundation Server)，以及開發團隊所使用的開發工具(ex: Visual Studio)，以確保在專案開發的過程中，任何的角色都可以在任何時候存取或是修正UML模型。&lt;/p&gt;  &lt;p&gt;我在新書&amp;lt;&amp;lt;Visual C# 2010與UML 開發實戰&amp;gt;&amp;gt;的最後一章，介紹了如何使用Visual Studio 2010 在解決方案當中建立UML模型，其中也包含了UML基本圖形的介紹。如果各位有使用Visual Studio 2010開發工具，或是對於UML模型有興趣的，不妨參考看看。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4483189869900874862?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4483189869900874862/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4483189869900874862' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4483189869900874862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4483189869900874862'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/07/uml.html' title='如何學習UML ?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1929526157197736748</id><published>2010-07-17T23:42:00.001+08:00</published><updated>2010-07-18T11:25:07.113+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='我的書'/><title type='text'>悅知文化 Visual Studio 2010 書系出版!!</title><content type='html'>&lt;p&gt;最近真的是忙到不可開交，連自己寫的書正在預購中都沒有打廣告....&lt;/p&gt;  &lt;p&gt;悅知文化針對Visual Studio 2010以及.NET Framework 4.0的應用程式開發技術，邀請了國內各方面學有專精的專家，出版了一系列的技術書籍。有興趣的朋友可以參考下面的DM，或是在天瓏網路書局(&lt;a href="http://tlsj.tenlong.com.tw/WebModule/News/newsDispAction.do?sid=329"&gt;http://tlsj.tenlong.com.tw/WebModule/News/newsDispAction.do?sid=329&lt;/a&gt;) 以75折預購 !&lt;/p&gt;  &lt;p&gt;&lt;img src="http://platform.ak.fbcdn.net/www/app_full_proxy.php?app=4949752878&amp;amp;v=1&amp;amp;size=o&amp;amp;cksum=620e65657b864dd0f61d8150d7d217d2&amp;amp;src=http%3A%2F%2Fwww.delightpress.com.tw%2Fimages%2Factivity%2Fact_201007_VS2010%2FVS2010edm.jpg" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1929526157197736748?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1929526157197736748/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1929526157197736748' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1929526157197736748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1929526157197736748'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/07/visual-stydio-2010.html' title='悅知文化 Visual Studio 2010 書系出版!!'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7875015372592762923</id><published>2010-07-04T14:32:00.001+08:00</published><updated>2010-07-07T23:49:38.179+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>總統府網站分析 -- 全民驗收(4)</title><content type='html'>&lt;p&gt;沒想到到今天(2010.07.04) 還有這麼多defects … 居然第3頁開始了…&lt;/p&gt;  &lt;p&gt;21. 月曆格式不一樣 (感謝仁哥提供)&lt;/p&gt;  &lt;p&gt;這問題可以看出開發流程是有問題的…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TDAq6ZGlbuI/AAAAAAAAOaQ/qZVZJKgbabg/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TDAq7ZDNpwI/AAAAAAAAOaU/b1_3N2pn9MA/image_thumb%5B1%5D.png?imgmax=800" width="324" height="241" /&gt;&lt;/a&gt; (日曆格式 - 1)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TDAq8pTOIKI/AAAAAAAAOaY/xzCQxiORAs8/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TDAq9vsc1WI/AAAAAAAAOac/fPRECXHPZbA/image_thumb%5B3%5D.png?imgmax=800" width="324" height="248" /&gt;&lt;/a&gt; (日曆格式 - 2)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TDDEIszdYSI/AAAAAAAAObY/O2WEXCKVu5c/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TDDEKNs_QfI/AAAAAAAAObc/Af0TilO3ikY/image_thumb%5B4%5D.png?imgmax=800" width="324" height="158" /&gt;&lt;/a&gt; (日曆格式 - 3)&lt;/p&gt;  &lt;p&gt;22. 無法查詢 (未完全修正)&lt;/p&gt;  &lt;p&gt;某些操作下，選好日期之後，無法正常執行查詢功能：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TDAzQk89eLI/AAAAAAAAOag/0zXpp6eTlP8/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TDAzR57-6gI/AAAAAAAAOak/JxktdztDtZs/image_thumb%5B1%5D.png?imgmax=800" width="644" height="277" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;[2010.07.04 15:19] 修改之後，變成不用輸入，或是隨便輸入都可以執行：[&lt;font color="#ff0000"&gt;安全漏洞&lt;/font&gt;]&lt;/p&gt;  &lt;p&gt;下面是輸入&amp;quot;22&amp;quot;，然後按下 &amp;quot;查詢&amp;quot; 之後的結果：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TDA2oJe_65I/AAAAAAAAOao/X8NqwEn0Y1w/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TDA2pav_C3I/AAAAAAAAOas/av7cCaA6QUY/image_thumb%5B3%5D.png?imgmax=800" width="644" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;23. 部分內容來源未通過無障礙網頁A+等級 –&amp;gt; 是否有弊端 ?&lt;/p&gt;  &lt;p&gt;感謝Jerry網友分享的資料，根據行政院研考會的測試報告，這一個網站上線迄今仍有頁面未通過合約中所規範的無障礙網頁A+等級標準。檢驗報告連結網址：&lt;a href="http://www.webguide.nat.gov.tw/enable/Servlet1?inputURL=http://media.president.gov.tw/MediaTotalView.aspx&amp;amp;analyzingGrade=APlus&amp;amp;isOnlyText=yes"&gt;http://www.webguide.nat.gov.tw/enable/Servlet1?inputURL=http://media.president.gov.tw/MediaTotalView.aspx&amp;amp;analyzingGrade=APlus&amp;amp;isOnlyText=yes&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TDChwMlSyZI/AAAAAAAAOaw/ZGBArJgTz0o/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TDChxZN1dsI/AAAAAAAAOa0/APY-PfgYCSY/image_thumb%5B1%5D.png?imgmax=800" width="644" height="152" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;而總統府的首頁也很巧妙的把&amp;quot;無障礙網頁A+等級&amp;quot; 的Logo拿掉：&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs015.ash2/34130_400980457748_707317748_4422497_3560816_n.jpg" /&gt; 這是6/29號的首頁文字，可以看到無障礙Logo&lt;/p&gt;  &lt;p&gt;&lt;img alt="通過A+等級無障礙網頁檢測, 另開視窗." src="http://www.webguide.nat.gov.tw/wSite/images/aplus.jpg" /&gt; &amp;lt;-- 無障礙 Logo長這樣&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TDCoNNIzUiI/AAAAAAAAOa4/pySWY3LcsxM/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TDCoOU8oJWI/AAAAAAAAOa8/tO03HIMk2jw/image_thumb%5B4%5D.png?imgmax=800" width="324" height="108" /&gt;&lt;/a&gt; 這是7/4的首頁文字，無障礙Logo 已拿掉&lt;/p&gt;  &lt;p&gt;感謝朋友的建議，有了圖片的證據，這些驗收的弊端都一覽無遺…&lt;/p&gt;  &lt;p&gt;*********************************************************************************************************&lt;/p&gt;  &lt;p&gt;另外一件很令人生氣的事，就是關於行政院研考會測試無障礙的網站，居然無法連結到總統府的網站提供測試報告；難道是&lt;strong&gt;&lt;font color="#ff0000"&gt;有內神通外鬼，想要防堵民眾知的權利嗎?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;證據如下：&lt;/p&gt;  &lt;p&gt;監察院網站的無障礙測試報告結果：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TDCoPf9NA8I/AAAAAAAAObA/bdwe73gwSlI/s1600-h/image%5B13%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TDCoRGFzIXI/AAAAAAAAObE/njF4JR6Cixw/image_thumb%5B6%5D.png?imgmax=800" width="644" height="142" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;總統府的無障礙測試報告結果：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TDCoSTyw98I/AAAAAAAAObI/pyiRu9q2aWQ/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TDCoTcKmr8I/AAAAAAAAObM/Roy56hFI8zA/image_thumb%5B8%5D.png?imgmax=800" width="644" height="404" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;我很確定我輸入的網址沒問題，各位網友也可以自己到研考會上試試：&lt;a href="http://www.webguide.nat.gov.tw/wSite/sp?xdUrl=/wSite/enable/senseSinglePage.jsp&amp;amp;mp=1"&gt;http://www.webguide.nat.gov.tw/wSite/sp?xdUrl=/wSite/enable/senseSinglePage.jsp&amp;amp;mp=1&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;很不可思議的，只有總統府的網站沒辦法測 !?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[有朋友使用IP位置可以測，但整件事還是很詭異]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;**********************************************************************************************************&lt;/p&gt;  &lt;p&gt;24. 出現無效的錯誤訊息 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TDC_S-RjFbI/AAAAAAAAObQ/BpevaWw5rfg/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TDC_UnlooII/AAAAAAAAObU/2hehiNczkwU/image_thumb%5B1%5D.png?imgmax=800" width="644" height="223" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;25. 錯誤日期送出後無錯誤訊息 &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TDMXNRrEqrI/AAAAAAAAObo/ykVG3tHjC-s/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TDMXPBZPcZI/AAAAAAAAObs/hP0T0jMfh8E/image_thumb%5B1%5D.png?imgmax=800" width="644" height="214" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;26. 這是一個Bug，一般寫程式的人不會注意到。&lt;/p&gt;  &lt;p&gt;當我在關鍵字欄位中，輸入&amp;quot;關鍵字&amp;quot;三個字的時候，查詢的結果必須是要和&amp;quot;關鍵字&amp;quot;三個字有關的，而不是傳回所有的資料。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TDMYyUVIIWI/AAAAAAAAObw/yeMlBaJXKSk/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TDMYzq2YzZI/AAAAAAAAOb0/7wYEZuJs9LE/image_thumb%5B4%5D.png?imgmax=800" width="644" height="291" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;27. 某些操作下，會出現下面頁面 ：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TDMcKsXWA8I/AAAAAAAAOb4/n82bN1KbXng/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TDMcL9LL-zI/AAAAAAAAOb8/AI51LRNIOQQ/image_thumb%5B10%5D.png?imgmax=800" width="644" height="221" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;這不是查詢沒有資料的結果，正常查不到資料是顯示這一頁：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TDMcNOt68VI/AAAAAAAAOcA/C_Hmgvjv3uE/s1600-h/image%5B23%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TDMcO_wRI6I/AAAAAAAAOcE/xqriuXaeB80/image_thumb%5B12%5D.png?imgmax=800" width="644" height="219" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;28. 消失的網頁內容&lt;/p&gt;  &lt;p&gt;某些操作下，網頁內容就會消失…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TDRn_MHGIOI/AAAAAAAAOcs/e_pVT9jonlE/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TDRoAPomGWI/AAAAAAAAOcw/BWPsiZl9qmo/image_thumb%5B2%5D.png?imgmax=800" width="644" height="280" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;29. 中文版的調整好了，英文版也該檢查一下吧? (2010.07.07) &lt;/p&gt;  &lt;p&gt;國際的門面，該注意一下….&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TDSiCAzBEZI/AAAAAAAAOc0/reJlfjMFxJ8/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TDSiD2xsFeI/AAAAAAAAOc4/AiPeejRGnBk/image_thumb%5B1%5D.png?imgmax=800" width="644" height="324" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;[2010.07.04 23:00] 發現把今天日期搞錯了，已更正。&lt;/p&gt;  &lt;p&gt;[2010.07.07] 上線一星期多了，還是一堆問題....唉&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7875015372592762923?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7875015372592762923/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7875015372592762923' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7875015372592762923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7875015372592762923'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/07/4.html' title='總統府網站分析 -- 全民驗收(4)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pfobZznF9qw/TDAq7ZDNpwI/AAAAAAAAOaU/b1_3N2pn9MA/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7646091679055430976</id><published>2010-07-03T16:29:00.001+08:00</published><updated>2010-07-04T14:22:07.446+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>總統府網站分析 -- 全民驗收(3)</title><content type='html'>&lt;p&gt;繼續編號下去：&lt;/p&gt;  &lt;p&gt;11. 版面錯亂&lt;/p&gt;  &lt;p&gt;某些操作之下，版面會亂掉：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TC70wS6uZMI/AAAAAAAAOYA/w7SxzHnWWh4/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC70x7yTFtI/AAAAAAAAOYE/v1UMdMhc-6c/image_thumb%5B2%5D.png?imgmax=800" width="741" height="324" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;12. 消失的兒童版內容：&lt;/p&gt;  &lt;p&gt;兒童版的網頁內容某些操作下會消失，如：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC70zrkAwdI/AAAAAAAAOYI/tIlhq5VdA1I/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TC701NVBIDI/AAAAAAAAOYM/H3ZAF4IgrZ4/image_thumb%5B4%5D.png?imgmax=800" width="324" height="229" /&gt;&lt;/a&gt; 這是原本頁面。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TC702SAUKRI/AAAAAAAAOYQ/WzlbLhfrBYk/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TC703uPl-nI/AAAAAAAAOYU/g2N8xxGmCp0/image_thumb%5B6%5D.png?imgmax=800" width="324" height="248" /&gt;&lt;/a&gt; 頁面內容不見了。&lt;/p&gt;  &lt;p&gt;13. 網頁停止回應&lt;/p&gt;  &lt;p&gt;某些操作下，網頁會停止回應，然後看到下面錯誤訊息：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC704pZMU1I/AAAAAAAAOYY/P8VEYFYNjDE/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TC705dEkf5I/AAAAAAAAOYc/X5xyQmlEeJ4/image_thumb%5B8%5D.png?imgmax=800" width="324" height="191" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;14. 總統手稿&lt;/p&gt;  &lt;p&gt;沒想到總統會親手回覆這種問題；頁面中也出現HTML標籤。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TC706UMPseI/AAAAAAAAOYg/Ep-qZuVTk4Y/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TC707jFmecI/AAAAAAAAOYk/1Qe2cZQDW1w/image_thumb%5B10%5D.png?imgmax=800" width="324" height="188" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;15. 網頁內容消失&lt;/p&gt;  &lt;p&gt;在某些操作下，網頁內容會完全消失不見。&lt;/p&gt;  &lt;p&gt;下面是清空的總統府建築歷史網頁：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC708a5NY7I/AAAAAAAAOYo/cKL8Rn3OZ3E/s1600-h/image%5B24%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TC709SsqGHI/AAAAAAAAOYs/jtW44BK_h2s/image_thumb%5B12%5D.png?imgmax=800" width="644" height="273" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;正常的總統府看板：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TC8li8V1QwI/AAAAAAAAOYw/4K3G9CgGLMg/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TC8lkCMnf-I/AAAAAAAAOY0/dIrmfV_HlHM/image_thumb%5B1%5D.png?imgmax=800" width="644" height="344" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;清空的總統府看板：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TC8llIT2h1I/AAAAAAAAOY4/qI89HqtGULE/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TC8lmGdMFdI/AAAAAAAAOY8/2JlGI6UhST4/image_thumb%5B3%5D.png?imgmax=800" width="644" height="347" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;16. 停用JavaScript之後，網頁亂掉，並且表單按鈕失效&lt;/p&gt;  &lt;p&gt;提示訊息就這樣顯示在網頁外：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TC8qIYc5F0I/AAAAAAAAOZA/CWemqbTKrSA/s1600-h/image%5B13%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC8qJymKzuI/AAAAAAAAOZE/ERR-WOOgFgQ/image_thumb%5B6%5D.png?imgmax=800" width="644" height="334" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Banner 整個格式跑掉，字也擠在一堆：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC8qLcwIuII/AAAAAAAAOZI/StwBmBAvPTw/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC8qMnyfMQI/AAAAAAAAOZM/Vb7tefeZTDY/image_thumb%5B8%5D.png?imgmax=800" width="484" height="182" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;更慘的是，表單的按鈕沒反應：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TC8qNzOVXJI/AAAAAAAAOZQ/GfYDzg02h5A/s1600-h/image%5B21%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC8qPGP9GOI/AAAAAAAAOZU/6fpP0tZw5lQ/image_thumb%5B10%5D.png?imgmax=800" width="324" height="209" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;17.&lt;/p&gt;  &lt;p&gt;某些操作下，系統會出現無法服務的錯誤訊息(系統沒有掛，但出現錯誤的頁面)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TC8y7armZjI/AAAAAAAAOZY/J2Znv4BiAZc/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC8y8hBTUVI/AAAAAAAAOZc/L4tNOFB0PvM/image_thumb%5B2%5D.png?imgmax=800" width="644" height="278" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TC8y94HsyaI/AAAAAAAAOZg/Hf5bpz-kqI4/s1600-h/image%5B10%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TC8y_SI2bDI/AAAAAAAAOZk/pqdM5Po6BDA/image_thumb%5B8%5D.png?imgmax=800" width="644" height="400" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;18. &lt;font color="#ff0000"&gt;&lt;strong&gt;安全漏洞&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;某些操作下，網站的內容會消失，同時出現 &amp;quot;登入&amp;quot; 按鈕：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC8zAnnLWNI/AAAAAAAAOZs/05TjHbSvgmY/s1600-h/image%5B14%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TC8zBw5p5PI/AAAAAAAAOZw/A6xrdPFxTT4/image_thumb%5B10%5D.png?imgmax=800" width="644" height="220" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;19. 總統出訪專輯送輓聯&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TC9QR9g0_bI/AAAAAAAAOZ4/t1mcj99z-n4/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC9QTEY5UjI/AAAAAAAAOZ8/9LzaFckyYk8/image_thumb%5B1%5D.png?imgmax=800" width="644" height="312" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;20. 模組無法載入? (&lt;font color="#ff0000"&gt;&lt;strong&gt;安全漏洞&lt;/strong&gt;&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;某些操作下，網頁會出現下面錯誤：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TC_zr2t_sbI/AAAAAAAAOaA/x0FRaMp18jc/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TC_ztj5WfMI/AAAAAAAAOaE/WthZnB-dNqg/image_thumb%5B1%5D.png?imgmax=800" width="644" height="168" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;英文版也有：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TDAoh0XtBXI/AAAAAAAAOaI/vIwVsLsrw8s/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TDAojUzIujI/AAAAAAAAOaM/kwNwOCdrHyM/image_thumb%5B1%5D.png?imgmax=800" width="644" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;有空再繼續更新，不過這些問題也反映了程式開發與測試流程有許多問題。我也很想知道，花了納稅人700萬，到底UAT是怎樣驗收的?&lt;/p&gt;  &lt;p&gt;(註：標題旁邊沒有加上&amp;quot;已解決&amp;quot;的都是未解決的問題。)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7646091679055430976?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7646091679055430976/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7646091679055430976' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7646091679055430976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7646091679055430976'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/07/3.html' title='總統府網站分析 -- 全民驗收(3)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pfobZznF9qw/TC70x7yTFtI/AAAAAAAAOYE/v1UMdMhc-6c/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7118799316600155952</id><published>2010-07-03T15:54:00.001+08:00</published><updated>2010-07-07T19:38:01.397+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>總統府網站分析 -- 全民驗收(2)</title><content type='html'>&lt;p&gt;總統府網站上線迄今，發現許多的問題；花納稅人的錢，這樣也可以驗收…&lt;/p&gt;  &lt;p&gt;1. XSS 安全漏洞 (未完全解決)&lt;/p&gt;  &lt;p&gt;解決了一個error參數的問題，但是還有一些其他未解決的問題也都跟XSS算是有關連。&lt;/p&gt;  &lt;p&gt;2. 手機版格式 (已解決)&lt;/p&gt;  &lt;p&gt;總統府不是第一個提供手機版的政府網站，我不知道為什麼可以這樣上線。&lt;/p&gt;  &lt;p&gt;要看圖請參考魚夫先生的網站(&lt;a href="http://yufuhome.blogspot.com/2010/06/blog-post_1136.html"&gt;http://yufuhome.blogspot.com/2010/06/blog-post_1136.html&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;3. 瀏覽器相容性測試沒做 (已解決)&lt;/p&gt;  &lt;p&gt;首頁的日期，在Chrome中顯示如圖：&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs015.ash2/34130_400980457748_707317748_4422497_3560816_n.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;4. 信件表單格式與錯誤訊息 (已解決)&lt;/p&gt;  &lt;p&gt;可以接收這種表單的業主不多....按鈕還跑到字上面，把字遮住&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TDRnAROQRQI/AAAAAAAAOcI/5t5F75hmEl8/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC7sjVDR3jI/AAAAAAAAOcM/hCUyuXAgTr8/image_thumb%5B1%5D.png?imgmax=800" width="244" height="148" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;[2010.07.06] 最下面的錯誤訊息，應該是因為在改後台程式吧…&lt;/p&gt;  &lt;p&gt;上線一星期就說要改版，明明就是還沒做好…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TDMV_9t5Q7I/AAAAAAAAOcU/mYmsb0WTmbw/s1600-h/image1%5B8%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TDMWBRsWJYI/AAAAAAAAOcY/Kz_9Sw7807I/image1_thumb%5B7%5D.png?imgmax=800" width="324" height="224" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[2010.07.07] 終於調整字體了… 唉&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TDRnESadwQI/AAAAAAAAOcc/swV4A2nJUAs/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TDRnFiz9vDI/AAAAAAAAOcg/kFa9sDF7hWo/image_thumb%5B2%5D.png?imgmax=800" width="324" height="227" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;5. 無法直接回首頁 (已解決)&lt;/p&gt;  &lt;p&gt;一般網站無論你在瀏覽哪一頁，按下網頁上網站的Logo，就可以回首頁。這網站到今天才有這功能。&lt;/p&gt;  &lt;p&gt;6. 改善建議表單不見了&lt;/p&gt;  &lt;p&gt;在某些操作下，會出現這樣的畫面&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TC7slWDHa1I/AAAAAAAAOXY/Jx0twcy49X0/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC7smfcZSOI/AAAAAAAAOXc/q8jGS-mcRh8/image_thumb%5B3%5D.png?imgmax=800" width="324" height="143" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;7. 兒童版網頁出現英文&lt;/p&gt;  &lt;p&gt;只能說我們國家程度好 !&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC7soKi6TTI/AAAAAAAAOXg/sCnvxgpPRNk/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TC7spQHMusI/AAAAAAAAOXk/Flz2XXgcY8k/image_thumb%5B5%5D.png?imgmax=800" width="324" height="156" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;8. 兒童版出現&amp;quot;成人&amp;quot; 內容&lt;/p&gt;  &lt;p&gt;總統與自由時報不合，不用跟小朋友說吧…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC7srTEdZeI/AAAAAAAAOXo/kQzQvcma404/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC7ss2XvtrI/AAAAAAAAOXs/wTkFNHGiQs4/image_thumb%5B7%5D.png?imgmax=800" width="324" height="183" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;9. 治國周記&lt;/p&gt;  &lt;p&gt;干發言人啥事?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TC7suiug06I/AAAAAAAAOXw/9mPnzwiGDys/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TC7sv4t26yI/AAAAAAAAOX0/jhA2T5D2TxM/image_thumb%5B9%5D.png?imgmax=800" width="324" height="193" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;10. 手機版網頁出現叉燒包&lt;/p&gt;  &lt;p&gt;在某些操作下，手機版網頁全部的圖片都無法顯示：&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TC7sw-_UTHI/AAAAAAAAOX4/mV6DbC3tsrw/s1600-h/image%5B23%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TC7syGnGeII/AAAAAAAAOX8/Valz1DTRWhw/image_thumb%5B11%5D.png?imgmax=800" width="324" height="341" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(未完待續 …)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7118799316600155952?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7118799316600155952/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7118799316600155952' title='4 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7118799316600155952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7118799316600155952'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/07/2.html' title='總統府網站分析 -- 全民驗收(2)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pfobZznF9qw/TC7sjVDR3jI/AAAAAAAAOcM/hCUyuXAgTr8/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7043132336385768152</id><published>2010-07-03T15:12:00.001+08:00</published><updated>2010-07-04T08:59:31.337+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>總統府網站分析 -- 全民驗收(1)</title><content type='html'>&lt;p&gt;最近拜讀了某網友的三篇 &amp;quot;總統府網站分析&amp;quot; 的文章，不知所云 …&lt;/p&gt;  &lt;p&gt;基本上，這個網站應該算是驗收了，所以才會上線。其實我不care這網站要花多少錢，反正不是我可以決定的(做案子的錢當然越多越好，資訊業才有前途)；但因為這是一個國家對外很重要的形象網站，因此若是沒有做好，也等於是把臉丟到國外。&lt;/p&gt;  &lt;p&gt;我相信專案團隊一定很辛苦，但以這樣的案子來說，既然要標，也應該事先做過評估；等到事後再把做不好的責任推給客戶，算是不負責任的。某網友的文章中提到，&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;這個專案應該是成功的, 因為就專案而言, 就是讓業主非常滿意的交付尾款&lt;/em&gt;&amp;quot; &lt;/p&gt;  &lt;p&gt;我不覺得業主會喜歡看到，付了尾款之後，得到一個一堆問題的網站之後，還要被廠商幹譙，然後每年還要付錢簽維護合約。&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;這幾天就 Alexa 的觀點來看, 從 3000 名外進到 3000 名內 (見右圖), 流量也瞬間多了四倍, 也可以當作是一個小型的壓力測試了&lt;/em&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;至少這段時間也超過內政部與法務部, 感覺起來似乎有點全民網站的味道了&lt;/em&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;網站在沒有預期的清況之下，流量瞬間多了四倍，就安全性來說，是令人擔心的事，不知道有甚麼好高興的。而網站所謂的 &amp;quot;壓力測試&amp;quot;，或是其他安全性的測試，都是必須要在可以被控制的環境或是時間中執行。網站上線才用使用者流量做壓力測試 ? 我沒在任何QA 的書上看過。&lt;/p&gt;  &lt;p&gt;另外，系統的安全性往往跟開發的架構與使用的技術與流程有關，但是不能把問題都丟給開發的架構與使用的技術。&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;em&gt;就正式與非正式的小道消息知道, 總統府網站的確有做過 Solid Code Analysis, 也就是所謂的 SCA, 這個至少避免了許多常見的問題, 包含&lt;font color="#ff0000"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/font&gt;&lt;/em&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;XSS&lt;/strong&gt;&lt;/font&gt;&lt;em&gt;, &lt;font color="#ff0000"&gt;SQL injection&lt;/font&gt;, BOF, ... 等等的基本問題都被測試過了, 甚至小道消息是也不少人做了不少嘗試, 最後目前 &amp;quot;只&amp;quot; 發現這個 Explicit Parameters 的 Error Text Handling (ErrTxt) 錯誤訊息處理問題的問題.&lt;/em&gt;&amp;quot;&lt;/p&gt;  &lt;p&gt;請參閱 ITHome 的連結(&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=62025"&gt;http://www.ithome.com.tw/itadm/article.php?c=62025&lt;/a&gt;)，這就是XSS的一種漏洞。如果像該網友所說，網站有做過SCA，也安全測過了，那上線半天不到就被發現XSS漏洞，那看不見的漏洞豈不是更多 ?&lt;/p&gt;  &lt;p&gt;下一篇我會把迄今我所看到的已解決跟未解決的問題貼上來，跟大家分享。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7043132336385768152?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7043132336385768152/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7043132336385768152' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7043132336385768152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7043132336385768152'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/07/1.html' title='總統府網站分析 -- 全民驗收(1)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-36363894389693272</id><published>2010-06-11T11:16:00.001+08:00</published><updated>2010-06-11T11:18:18.048+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server AppFabric'/><title type='text'>Windows Server AppFabric Caching (2) - 存放ASP.NET應用程式的Session資料</title><content type='html'>&lt;p&gt;除了暫存應用程式可共享的快取資料之外，另一個Windows Server AppFabric Caching 服務重要的功能就是可以做為ASP.NET網際網路應用程式out-of-process session資料的存放空間。操作的方式相當的簡單：&lt;/p&gt;  &lt;p&gt;1. 加入組件參考，用戶端應用程式需要用的的組件為Microsoft.ApplicationServer.Caching.Client.dll以及Microsoft.ApplicationServer.Caching.Core.dll。&lt;/p&gt;  &lt;p&gt;2. 在Web.config中，加入下面設定：&lt;/p&gt;  &lt;p&gt;a. 在&amp;lt;configSections&amp;gt;區段中，加入:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBGqZL515mI/AAAAAAAAOWU/8op8TTUzrwI/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TBGqZ2cQC_I/AAAAAAAAOWY/MBWgglh16W8/image_thumb%5B9%5D.png?imgmax=800" width="552" height="146" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;b. 接著，在&amp;lt;configuration&amp;gt;中，使用剛剛的宣告建立&amp;lt;dataCacheClient&amp;gt;區段，並設定快取服務的位置：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBGqbP8dxNI/AAAAAAAAOWg/4QlAVf9uqSA/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TBGqcdXts9I/AAAAAAAAOWk/ZQdoZ13pLAg/image_thumb%5B10%5D.png?imgmax=800" width="234" height="223" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;c. 修改&amp;lt;system.web&amp;gt;區段中Session Provoder的宣告：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBGqdOkxMMI/AAAAAAAAOWo/EW7QLc9-0IA/s1600-h/image%5B20%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TBGqerCevUI/AAAAAAAAOWs/rMVbpNsRPkI/image_thumb%5B14%5D.png?imgmax=800" width="644" height="257" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;如此一來，ASP.NET也可以使用分散式的in-memory快取叢集。比較需要注意的是，若是要使用High-Availability的快取來存放Session資料的話，&lt;font color="#ff0000"&gt;所有快取叢集機器的作業系統都必須要是Enterprise或是Datacenter版本&lt;/font&gt;，並且要&lt;font color="#ff0000"&gt;使用Secondaries參數建立具名快取&lt;/font&gt;：&lt;/p&gt;  &lt;p&gt;&lt;em&gt;New-Cache –CacheName session &lt;strong&gt;–Secondaries 1&lt;/strong&gt; –TTL 1440&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-36363894389693272?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/36363894389693272/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=36363894389693272' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/36363894389693272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/36363894389693272'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/windows-server-appfabric-caching-2.html' title='Windows Server AppFabric Caching (2) - 存放ASP.NET應用程式的Session資料'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pfobZznF9qw/TBGqZ2cQC_I/AAAAAAAAOWY/MBWgglh16W8/s72-c/image_thumb%5B9%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1341266224705802022</id><published>2010-06-11T01:18:00.001+08:00</published><updated>2010-06-11T01:20:24.979+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><title type='text'>Windows Server AppFabric Caching 的二三事</title><content type='html'>&lt;p&gt;1. 正式版的改變：&lt;/p&gt;  &lt;p&gt;2009年6月的MSDN雜誌的這一篇文章 &amp;quot;Build Better Data-Driven Apps With Distributed Caching&amp;quot; (&lt;a title="http://msdn.microsoft.com/zh-tw/magazine/dd861287.aspx" href="http://msdn.microsoft.com/zh-tw/magazine/dd861287.aspx"&gt;http://msdn.microsoft.com/zh-tw/magazine/dd861287.aspx&lt;/a&gt;) 寫得相當不錯，然而在正式版中有些地方不太一樣，例如：&lt;/p&gt;  &lt;p&gt;(1) 參考的組件名稱與位置不同。&lt;/p&gt;  &lt;p&gt;(2) CacheFactory –&amp;gt; DataCacheFactory; Cache –&amp;gt; DataCache. &lt;/p&gt;  &lt;p&gt;(3) New-Cache 指令的參數名稱不太一樣。&lt;/p&gt;  &lt;p&gt;好吧，我就直接告訴你，&lt;strong&gt;Beta 2跟正式版之間有許多不一樣的地方&lt;/strong&gt;，有興趣操作Windows Server AppFabric的朋友可以參考我的前一篇範例操作。&lt;/p&gt;  &lt;p&gt;2. 在ASP.NET應用程式中設定Windows Server AppFabric Caching做為Session providers會出現 &amp;quot;&lt;strong&gt;無法載入型別 'Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider'&lt;/strong&gt;&amp;quot; 的錯誤：&lt;/p&gt;  &lt;p&gt;這是因為在Web.Config中，若是要參考型別定義，要參照GAC的定義就要使用完整名稱：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBEeWfOwwbI/AAAAAAAAOVU/rDtzcVgam3o/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TBEeXQfc8PI/AAAAAAAAOVY/N1LquhOR2gQ/image_thumb%5B10%5D.png?imgmax=800" width="601" height="195" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;若是要使用簡式名稱的話，就必須先把&amp;quot;Microsoft.ApplicationServer.Caching.Client.dll&amp;quot;組件複製到網站的bin目錄下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBEeYAv5O3I/AAAAAAAAOVg/B3AeLYHpmjM/s1600-h/image%5B22%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TBEeZZ6Tw0I/AAAAAAAAOVk/-mSsP_MBQ7Q/image_thumb%5B16%5D.png?imgmax=800" width="390" height="231" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;簡式名稱設定如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TBEeakCAtFI/AAAAAAAAOVo/suyygF0Yo9o/s1600-h/image%5B23%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TBEebqo-yOI/AAAAAAAAOVs/3UwSbELxBQA/image_thumb%5B17%5D.png?imgmax=800" width="596" height="146" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1341266224705802022?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1341266224705802022/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1341266224705802022' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1341266224705802022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1341266224705802022'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/windows-server-appfabric-caching.html' title='Windows Server AppFabric Caching 的二三事'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pfobZznF9qw/TBEeXQfc8PI/AAAAAAAAOVY/N1LquhOR2gQ/s72-c/image_thumb%5B10%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7353116483973219051</id><published>2010-06-11T00:31:00.001+08:00</published><updated>2010-06-11T00:31:53.051+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server AppFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Windows Server AppFabric Caching (1) - 初體驗</title><content type='html'>&lt;p&gt;Windows Server AppFabric 是微軟在新一代分散式架構中，相當重量級的一個應用程式平台。而透過Windows Server AppFabric 所提供的資料快取服務，我們可以快速地利用多台機器建立分散式而且In-Memory 的Cache-Tier，不但可以減輕資料庫的負擔，也可以增加資料存取的速度。基本的架構圖如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBETPZBEa-I/AAAAAAAAOUE/JALenjlc9wM/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TBETQoB9ICI/AAAAAAAAOUI/x29TEIEf4z0/image_thumb%5B1%5D.png?imgmax=800" width="559" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(圖片來源：MSDN雜誌 &lt;a title="http://msdn.microsoft.com/zh-tw/magazine/dd861287.aspx" href="http://msdn.microsoft.com/zh-tw/magazine/dd861287.aspx"&gt;http://msdn.microsoft.com/zh-tw/magazine/dd861287.aspx&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt; 關於Windows Server AppFabric Caching的一些其他的基本資訊與一些基本觀念，各位可以先參考保哥之前整理的文章(&lt;a title="http://blog.miniasp.com/post/2009/12/Windows-Server-AppFabric-Caching-Velocity-Notes.aspx" href="http://blog.miniasp.com/post/2009/12/Windows-Server-AppFabric-Caching-Velocity-Notes.aspx"&gt;http://blog.miniasp.com/post/2009/12/Windows-Server-AppFabric-Caching-Velocity-Notes.aspx&lt;/a&gt;)，這裡就不再贅述。安裝建置好Windows Server AppFabric Caching的環境之後，可以按照下面的兩個步驟，建立簡單的快取層級環境：&lt;/p&gt;  &lt;p&gt;1. 啟動快取叢集(Cache Cluster)：&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Windows Server AppFabric Caching最大的特色之一，就是可以利用多台機器的記憶體環境建立快取叢集，用來暫存應用程式間可以共享的物件資料。在PowerShell中使用&lt;strong&gt;&lt;em&gt;Start-CacheCluster&lt;/em&gt;&lt;/strong&gt;指令可以啟動多台機器上的Cacheing Service所建立的快取叢集。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBETRsCT3gI/AAAAAAAAOUM/dzCJwwOQkCY/s1600-h/image%5B30%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TBETS03mz2I/AAAAAAAAOUQ/fAzFdGEjmhQ/image_thumb%5B16%5D.png?imgmax=800" width="630" height="114" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. 建立具名快取(Named Cache)&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 具名快取是在快取叢集中暫存資料的單元，而每個暫存在具名快取中的物件稱為快取項目(Cache Item)。程式要使用快取叢集之前，必須要先使用&lt;strong&gt;&lt;em&gt;New-Cache&lt;/em&gt;&lt;/strong&gt;指令建立可以暫存物件的具名快取。在PowerShell中執行下面指令，可以建立一個名為&amp;quot;catalog&amp;quot;的具名快取：&lt;/p&gt;  &lt;p&gt;&lt;em&gt;New-Cache -CacheName catalog -Eviction none -Expirable false&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;快取層級的環境建好之後，可以透過下面的方法建立簡單的用戶端程式測試：&lt;/p&gt;  &lt;p&gt;1. 建立一個新的Console Application.&lt;/p&gt;  &lt;p&gt;2. 加入組件參考，用戶端應用程式需要用的的組件為Microsoft.ApplicationServer.Caching.Client.dll以及Microsoft.ApplicationServer.Caching.Core.dll。這兩個組件是安裝在 Windows\System32\AppFabric 目錄底下；若是64位元的開發環境，請先在Windows目錄下建立一個SysNative資料夾，再參考到Windows\SysNative\AppFabric 目錄。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TBETT9rDbMI/AAAAAAAAOUU/RFZqtKYeomY/s1600-h/image%5B32%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TBETVHXfOsI/AAAAAAAAOUY/Wn3hLn8RwxM/image_thumb%5B18%5D.png?imgmax=800" width="346" height="260" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;3. 加入下面兩個命名空間：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TBETV-kMY-I/AAAAAAAAOUc/0XSLuwuEVTU/s1600-h/image%5B33%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TBETW8WXUNI/AAAAAAAAOUg/h4NHU5Lvjq4/image_thumb%5B19%5D.png?imgmax=800" width="376" height="61" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;4. 宣告要加入快取中的物件類別定義，注意需要支援序列化：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TBETX1K5e1I/AAAAAAAAOUk/8MAn7TPVNHc/s1600-h/image%5B35%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TBETY1CofQI/AAAAAAAAOUo/GU4p378EheI/image_thumb%5B21%5D.png?imgmax=800" width="327" height="274" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;5. 最後，透過程式建立要加入快取的物件，並且加入具名快取中。完成之後再取出來：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TBETZzuRT-I/AAAAAAAAOUs/lG-T5_KAoIs/s1600-h/image%5B38%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TBETbDBgKjI/AAAAAAAAOUw/5uyLHdrG_SI/image_thumb%5B24%5D.png?imgmax=800" width="458" height="271" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;程式完成的結果如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/TBETcLali4I/AAAAAAAAOU0/v3L6wKrSJJE/s1600-h/image%5B41%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/TBETdks2E6I/AAAAAAAAOU4/uzSc6tCGXVU/image_thumb%5B27%5D.png?imgmax=800" width="393" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;這次先做到這，有時間再詳細一一介紹這些設定。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7353116483973219051?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7353116483973219051/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7353116483973219051' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7353116483973219051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7353116483973219051'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/windows-server-appfabric-caching-1.html' title='Windows Server AppFabric Caching (1) - 初體驗'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_pfobZznF9qw/TBETQoB9ICI/AAAAAAAAOUI/x29TEIEf4z0/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1027854959135514076</id><published>2010-06-08T09:33:00.001+08:00</published><updated>2010-06-08T09:33:43.497+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Microsoft Expression Studio 4 已經可以下載了!</title><content type='html'>&lt;p&gt;雖然透過Visual Studio 2010就可以直接設計Silverlight 4的應用程式表單，不過若是要做比較炫的效果的話，還是需要透過好的設計工具。&lt;/p&gt;  &lt;p&gt;下載Microsoft Expression Studio 4：&lt;a title="http://www.microsoft.com/expression/try-it/" href="http://www.microsoft.com/expression/try-it/"&gt;http://www.microsoft.com/expression/try-it/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/TA2d8YCzUFI/AAAAAAAAOT8/cvoUWJ51NKU/s1600-h/studio4-ultimate%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="studio4-ultimate" border="0" alt="studio4-ultimate" src="http://lh6.ggpht.com/_pfobZznF9qw/TA2d9d4X1uI/AAAAAAAAOUA/Ou_F6qs1EQs/studio4-ultimate_thumb.png?imgmax=800" width="154" height="177" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1027854959135514076?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1027854959135514076/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1027854959135514076' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1027854959135514076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1027854959135514076'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/microsoft-expression-studio-4.html' title='Microsoft Expression Studio 4 已經可以下載了!'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/TA2d9d4X1uI/AAAAAAAAOUA/Ou_F6qs1EQs/s72-c/studio4-ultimate_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2739808092880873086</id><published>2010-06-08T01:33:00.001+08:00</published><updated>2010-06-08T01:33:47.920+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Recommended Updates for Windows Server AppFabric</title><content type='html'>&lt;p&gt;Here you will find the list of applicable updates for Windows Server AppFabric and its dependencies.&lt;/p&gt;  &lt;p&gt;New updates will be added to the list as they become available.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You experience several issues when you use Powershell cmdlets or AppFabric features in IIS 7.0 or IIS 7.5     &lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/980423"&gt;KB980423&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Some services are preloaded unexpectedly when you start a website that contains multiple applications in IIS 7.5     &lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/983484"&gt;KB983484&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;資料來源：Windows Server AppFabric(&lt;a title="http://msdn.microsoft.com/en-us/windowsserver/ff637504.aspx" href="http://msdn.microsoft.com/en-us/windowsserver/ff637504.aspx"&gt;http://msdn.microsoft.com/en-us/windowsserver/ff637504.aspx&lt;/a&gt;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2739808092880873086?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2739808092880873086/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2739808092880873086' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2739808092880873086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2739808092880873086'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/recommended-updates-for-windows-server.html' title='Recommended Updates for Windows Server AppFabric'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-6264379847940885862</id><published>2010-06-08T00:33:00.001+08:00</published><updated>2010-06-08T00:33:23.987+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Server AppFabric – 應該是RTM</title><content type='html'>&lt;p&gt;今天百敬問我Windows Server AppFabric release了沒，剛好我上星期demo時有介紹到，依稀記得當時安裝的是5/19號release的RC版，沒想到今天再查一次，發現6/4號又有一個版本，而且產品說明中有這一段話：&lt;/p&gt;  &lt;p&gt;&amp;quot;支援從 Windows Server AppFabric Beta 2 Refresh 與 Windows Server AppFabric RC 升級。&amp;quot;&lt;/p&gt;  &lt;p&gt;通常RC之後就是RTM版，而我下載之後也順利的把原本的Windows Server AppFabric升級到新版本，看來應該是RTM版。比較奇怪的是這次release居然沒有看到發表聲明(或是我漏掉了 ?)&lt;/p&gt;  &lt;p&gt;下載 Window Server AppFabric：&lt;a title="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=467e5aa5-c25b-4c80-a6d2-9f8fb0f337d2" href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=467e5aa5-c25b-4c80-a6d2-9f8fb0f337d2"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=467e5aa5-c25b-4c80-a6d2-9f8fb0f337d2&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-6264379847940885862?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/6264379847940885862/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=6264379847940885862' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6264379847940885862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6264379847940885862'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/windows-server-appfabric-rtm.html' title='Windows Server AppFabric – 應該是RTM'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-6637068314920260244</id><published>2010-06-07T15:49:00.001+08:00</published><updated>2010-06-07T15:52:57.716+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><title type='text'>如何使用Silverlight建構雲端應用程式--研討會講義</title><content type='html'>6/3號在台灣微軟跟大家分享了 "如何使用Silverlight建構雲端應用程式"，當天研討會的Sildes已經上載到：&lt;a title="http://docs.com/19DN" href="http://docs.com/19DN"&gt;http://docs.com/19DN&lt;/a&gt; 。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-6637068314920260244?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/6637068314920260244/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=6637068314920260244' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6637068314920260244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6637068314920260244'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/silverlight.html' title='如何使用Silverlight建構雲端應用程式--研討會講義'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4550893770442117800</id><published>2010-06-01T17:48:00.001+08:00</published><updated>2010-06-02T00:11:40.618+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>解決WCF RIA Services中，Entity Model改變DomainService不會同步更新的問題</title><content type='html'>&lt;p&gt;WCF RIA Services 對於開發以資料為導向的Silverlight應用程式而言，是一個相當方便的工具。在Visual Studio 2010開發工具中，當建立好了一個Entity Model之後，若是資料庫的模型有修改過的話，你可以透過&amp;quot;Update Model from Database&amp;quot;的功能選項，將資料庫最新的定義更新到Entity Model中：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TATXONu4AsI/AAAAAAAAOTc/JKVV5cnyMdk/s1600-h/image%5B15%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/TATXPP521FI/AAAAAAAAOTg/ttmEpnfmX68/image_thumb%5B9%5D.png?imgmax=800" width="242" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;然而這一個動作只會更新Entity Model裡面資料時體的定義，並不會幫你在既有的Domain Service中針對這些資料實體新增Metadata定義及用戶端程式存取時所需要的指令。在WCF RIA 1.0當中，你可以試著用下面的步驟解決這一個問題：&lt;/p&gt;  &lt;p&gt;1. 在Server端專案中加入一個新的DomainService定義檔&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; 這一個步驟的目標，是要透過Visual Studio 2010 開發工具，建立用戶端存取新的資料實體所需要的介面與中繼資料(metadata)。新的DomainService原始檔可以暫時先命名為TempDomainService.cs或是你可以識別的名稱：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/TATXQ4CpIOI/AAAAAAAAOTk/LHOyvreiimw/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/TATXSeD_AlI/AAAAAAAAOTo/-o-0PEhx1Tw/image_thumb%5B11%5D.png?imgmax=800" width="644" height="430" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;接著在精靈中，設定DomainService類別的定義：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/TATXUJyDzZI/AAAAAAAAOTs/3YSenemQeX4/s1600-h/image%5B19%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/TATXVBFbABI/AAAAAAAAOT0/G3oEXDzWYPM/image_thumb%5B13%5D.png?imgmax=800" width="397" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;設定時注意兩個技巧：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;(1) Domain service class name請&lt;strong&gt;設為&lt;font color="#ff0000"&gt;原本的Domain Service類別名稱&lt;/font&gt;&lt;/strong&gt;。&lt;/p&gt;    &lt;p&gt;(2) Entities 請&lt;strong&gt;選擇需要加入的資料實體定義即可&lt;/strong&gt;，其他的不用選。&lt;/p&gt;    &lt;p&gt;完成之後按下OK按鈕，開發工具會建立新的DomainService定義檔。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. 開啟新的DomainService類別原始檔(以這個例子來說是TempDomainService.cs)，刪除類別前面的&amp;quot;[EnableClientAccess()]&amp;quot;標籤，並且使用&lt;strong&gt;partial&lt;/strong&gt;關鍵字將該DomainService宣告為部分類別。&lt;/p&gt;  &lt;p&gt;3. 開啟既有的DomainService類別原始檔(以這個例子來說是MessageWallDomainService.cs)，使用&lt;strong&gt;partial&lt;/strong&gt;關鍵字將該DomainService宣告為部分類別 (但是不可以刪除類別前面的&amp;quot;[EnableClientAccess()]&amp;quot;標籤)。&lt;/p&gt;  &lt;p&gt;接下來重新編譯Server端及Client端專案的程式，你就會可以從Silverlight應用程式中去存取Entity Model中新的資料實體了!&lt;/p&gt;  &lt;p&gt;我不確定在下一版的WCF RIA Services開發工具中會不會修正這一個問題，不過透過部分類別來建立DomainServices，只要你的類別命名規則夠清楚，某種程度來說，也不會增加太多DomainService維護的負擔。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4550893770442117800?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4550893770442117800/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4550893770442117800' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4550893770442117800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4550893770442117800'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/06/wcf-riaentity-modeldomainservice.html' title='解決WCF RIA Services中，Entity Model改變DomainService不會同步更新的問題'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_pfobZznF9qw/TATXPP521FI/AAAAAAAAOTg/ttmEpnfmX68/s72-c/image_thumb%5B9%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4055380304434097950</id><published>2010-05-27T13:41:00.001+08:00</published><updated>2010-05-27T13:41:07.095+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><title type='text'>HTML 5+ CSS 3 會殺了Flash 跟Silverlight ? -2</title><content type='html'>&lt;p&gt;會拿Silverlight跟Flash比較的人，基本上，不懂Silverlight.....&lt;/p&gt;  &lt;p&gt;從Silverlight 2開始，我在所有的文章與研討會中就明白的揭示了，&amp;quot;&lt;strong&gt;Silverlight是網際網路應用程式開發技術&lt;/strong&gt;&amp;quot; 的觀念。在VS 2010中，不需要使用Microsoft Blend，就可以直接開發Silverlight的表單操作介面，同時Silverlight Application也可以直接支援Windows、Forms以及SharePoint的驗證，再加上WCF RIA Services的支援，基本上只要會C#的開發人員，不懂HTML、JavaScript，也可以快速的開發出豐富的網際網路應用程式。再加上容易除錯與VS 2010提供了方便的開發環境以及跨平台的支援(Mac、Windows、Linux、WM7)，只要微軟好好發展下去可望成為.NET網際網路應用程式開發的另一個主流。&lt;/p&gt;  &lt;p&gt;記得當年HTML剛出來，大家有跑馬燈(&amp;lt;marquee/&amp;gt;)可以用，覺得超新奇超炫的，一時之間每個網站幾乎都有跑馬燈的橫條在上面跑的情況。時至今日，有多少人還在用? 所謂的標準，真的就是符合大家使用的準則，抑或是限制技術成長的濫觴? HTML 5 跟CSS 3的出現，目前獲益最大的應該是這兩家公司：&lt;/p&gt;  &lt;p&gt;1. Apple：原本不想支援Flash，但是使用者又想看Flash做出來的效果。&lt;/p&gt;  &lt;p&gt;2. Adobe：想不到吧! HTML 5+CSS 5讓Adobe不需要追著瀏覽器去提供新的擴充套件，還可以出新版的CS賺錢。&lt;/p&gt;  &lt;p&gt;前一篇也已經說明過了，要叫瀏覽器做更多的事，就必須要有更複雜的瀏覽器的道理。現在所有的個人電腦瀏覽器都有Flash套件可以支援，因此瀏覽器有沒有支援HTML 5 我不相信目前會有多少人care；但是行動裝置則未必。HTML 5 既然是標準，行動裝置製造商就可以直接從作業系統中去支援這一個標準，提供原生的網際網路多媒體存取環境，避開瀏覽器的效能問題；而這一塊也不是目前Flash主攻的市場，因此HTML 5要從此切入，才會有比較大的發展空間。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4055380304434097950?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4055380304434097950/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4055380304434097950' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4055380304434097950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4055380304434097950'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/05/html-5-css-3-flash-silverlight-2.html' title='HTML 5+ CSS 3 會殺了Flash 跟Silverlight ? -2'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7947243275586006377</id><published>2010-05-27T12:36:00.001+08:00</published><updated>2010-05-27T18:23:50.901+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>WCF Service的介面設計</title><content type='html'>&lt;p&gt;WCF Service 透過Service Contract提供服務的介面給Client端的應用程式使用。常常會有人問我，如果WCF Service的服務介面需要修改，應該要怎麼辦的問題。如果從元件的角度出發來看的話，介面修改相對的所有使用該元件的應用程式也都必須要跟著被修改，這對於可能會需要隨著企業邏輯做調整的WCF服務來說，會造成不小的影響&lt;/p&gt;  &lt;p&gt;在繼續這個話題之前，先請大家思考一下，如果你家的電器插頭，每一種電器插頭的規格都不一樣的話，會是怎樣的世界? &lt;/p&gt;  &lt;p&gt;從這樣的角度去思考的話，服務的介面規格當然是設計的越簡單越好。微軟所提供的Design Guideline中提到：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Avoid tight coupling across layers. &lt;/li&gt;    &lt;li&gt;Design coarse-gained operations. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;對於90%以上的服務來說，我們需要兩個基本的功能：&lt;/p&gt;  &lt;p&gt;1. 執行指令並回傳運算結果或是錯誤資訊。&lt;/p&gt;  &lt;p&gt;2. 確定目前服務是正常的。&lt;/p&gt;  &lt;p&gt;根據這樣的出發點，我們可以設計出一個通用的WCF Service介面：&lt;/p&gt;  &lt;p&gt;[ServiceContrract]&lt;/p&gt;  &lt;p&gt;public interface ICommonService{&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[OperationContract]&lt;/p&gt;    &lt;p&gt;object Execute (string command, Dictionary&amp;lt;string,object&amp;gt; parameters, out string errorMessage);&lt;/p&gt;    &lt;p&gt;[OperationContract]&lt;/p&gt;    &lt;p&gt;bool Diagnostics ();&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;在這樣的介面設計之下，你的服務不管要增加多少功能，或是要減少功能，都不會需要更動到服務的介面規格，只需要支援新的command指令即可。但是需要注意的是，因為在這個服務介面規格中是使用object型別傳遞資料，因此你必須要另外再使用Data Contract宣告可序列化物件，然後透過ServiceKnownType將該物件定義加入WCF服務規格中。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7947243275586006377?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7947243275586006377/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7947243275586006377' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7947243275586006377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7947243275586006377'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/05/wcf-service.html' title='WCF Service的介面設計'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1627831454755156730</id><published>2010-05-27T00:58:00.001+08:00</published><updated>2010-05-27T00:58:40.245+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>HTML 5+ CSS 3 會殺了Flash 跟Silverlight ?</title><content type='html'>&lt;p&gt;前兩天SAM問了我Silverlight會不會沒有前途的問題。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;基本上，從我目前所得到的資訊來看，HTML 5正在走當年Silverlight 1.0、1.1所走的路。Markup Language、CSS基本上都是需要透過parser解析過才會有樣式；而Tag與CSS所能做的事情越多，parser的等級就需要用高。換句話說，瀏覽器就越複雜，網頁的模型也就越複雜。Silverlight 1.x當年就是希望透過XAML+JavaScript建立高互動性的網頁，但是因為XAML的Tag太多太複雜，再加上JavaScript不容易維護與除錯，最後還是發展成編譯式的架構。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;未來的趨勢，上網的裝置會走向輕量化的嵌入式系統或是行動裝置為主，在省電與節省成本的考量下，這些裝置所提供的瀏覽器大多無法像一般瀏覽器完整支援JavaScript或是樣式，因此若是你所開發的網際網路應用程式，需要在這些環境下執行，勢必就要另外開發特定的版本來滿足需求。而HTML 5和CSS 3有多少功能會被這些瀏覽器完整支援?&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Flash雖然目前在網頁中被廣泛使用，但是因為Adobe自己沒有作業系統，也沒做瀏覽器，被賈伯斯幹譙也只能摸摸鼻子吃悶虧。反觀是微軟，在Silverlight 4與VS2010推出之後，就搶先推出WM 7的Silverlight 4在WM 7的模擬環境，所以在WM 7中會支援Silverlight已經是可以確定的事。HTML 5+ CSS 3目前看來，應該可以視為瀏覽器製造商不甘心瀏覽器成為Flash、Silverlight等RIA技術的附庸的反撲；但以目前設計人員已經習慣使用Flash方便的設計工具來設計網頁中的動畫、微軟自己又有完整的Silverlight發展環境規劃看來，短期大概只有Open Source的community會很感興趣。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;但HTML 5也不是沒前途，等到行動嵌入式系統個普及之後，作業系統的廠商就會跟微軟一樣，由作業系統層直接去支援解析這些標籤的能力。屆時桌面即是瀏覽器，才會是真的戰場...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1627831454755156730?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1627831454755156730/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1627831454755156730' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1627831454755156730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1627831454755156730'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/05/html-5-css-3-flash-silverlight.html' title='HTML 5+ CSS 3 會殺了Flash 跟Silverlight ?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4584181217432774648</id><published>2010-05-26T23:56:00.001+08:00</published><updated>2010-05-27T11:26:09.521+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><title type='text'>Web Service? WCF Service?</title><content type='html'>&lt;p&gt;最近有位朋友在網路以及MSN上面問我，Web Service和WCF Service的差別到底在哪裡呢?&lt;/p&gt;  &lt;p&gt;Web Service，從字面上可以直譯為&amp;quot;網路服務&amp;quot;，可以從廣義或是狹義方面來解釋。廣義的來說，只要是服務提供者透過網際網路所提供的服務，都可以稱為網路服務。例如微軟所提供的SkyDrive，Google 所提供的Gmail、Google Earth，都可以視為廣義的網路服務。而狹義的網路服務，指的則是在網際網路上，可以透過網路服務的標準，SOAP或是WS-I所存取的應用程式服務介面。如果是這樣來看的話，Web Service 就可以視為在網際網路上的元件；因為網際網路本身具有跨平台的特性，因此無論你是透過.NET或是Java等程式語言所建立的Web Service，就可以在不同平台被使用，因此可以用來建立分散式架構中跨平台使用的元件。&lt;/p&gt;  &lt;p&gt;除了Web Service 之外，微軟在分散式架構中，也有許多開發分散式元件的技術，像是Remoting、MSMQ等。因為每種技術都有特定的溝通模式，也各有各的優缺點。像是Web Service雖然可以跨平台，但是速度上就比Remoting支援的TCP Channel幔上許多；但是開發及設定Remoting元件的efforts，又比Web Service複雜。更重要的是，你必須要懂每種不同的技術，才可以作出符合需求的企業級元件，這對於開發人員來講，是相當沉重的負荷。&lt;/p&gt;  &lt;p&gt;為了解決這樣的問題，因此微軟從.NET 3.0開始推出了WCF的技術。WCF整合了Web Service、Remoting、MSMQ等微軟分散式元件開發技術，只需要開發一個WCF Service，就可以透過設定的方式，發佈支援不同通訊協定的服務端點。因此現在若是你要開發新的網路服務的話，在.NET Framework中就統一透過WCF技術框架開發。&lt;/p&gt;  &lt;p&gt;有興趣可以再回顧之前我所寫的幾篇：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://john-publish.blogspot.com/2008/08/1.html"&gt;微軟新一代分散式架構與網際網路開發技術剖析(1)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://john-publish.blogspot.com/2008/08/2.html"&gt;微軟新一代分散式架構與網際網路開發技術剖析(2)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://john-publish.blogspot.com/2008/08/3.html"&gt;微軟新一代分散式架構與網際網路開發技術剖析(3)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4584181217432774648?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4584181217432774648/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4584181217432774648' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4584181217432774648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4584181217432774648'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/05/web-service-wcf-service.html' title='Web Service? WCF Service?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2164111178979126713</id><published>2010-04-13T13:15:00.001+08:00</published><updated>2010-04-13T15:59:41.544+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><title type='text'>如何升級VS2010英文正式版</title><content type='html'>&lt;p&gt;如果你也是MSDN訂戶的話，今天開始就可以從網站下載Visual Studio 2010正式版了。但是在MSDN網站上並不會提供Visual Studio 2010開發工具的安裝序號，所以如果在你的電腦上，曾經有安裝過Visual Studio 2010 RTM試用版的話，你可以按照下面的步驟升級成正式版。&lt;/p&gt;  &lt;p&gt;1. 從MSDN網站下載正式版ISO檔，燒成光碟或在入虛擬光碟機，然後啟動安裝程式。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/S8QkTknfqUI/AAAAAAAAOS0/A9zzr5hpQAA/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/S8QkUwz6_JI/AAAAAAAAOS4/s3aL4-lJBj4/image_thumb%5B10%5D.png?imgmax=800" width="506" height="388" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. 在安裝程式歡迎頁中，按下 &amp;quot;Next&amp;quot; 按鈕。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/S8QkWqhtR3I/AAAAAAAAOS8/gmHM_CPcqsc/s1600-h/image%5B17%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/S8QkYEK289I/AAAAAAAAOTA/fXimP52gRLE/image_thumb%5B13%5D.png?imgmax=800" width="506" height="385" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. 在Maintenance Page的下方，有個“Activate”按鈕，按下去之後就完成啟動手續了!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/S8QkZS-LcnI/AAAAAAAAOTE/wzSeOByzYcY/s1600-h/image%5B29%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/S8QkajPap6I/AAAAAAAAOTI/6f9393jAoa0/image_thumb%5B23%5D.png?imgmax=800" width="504" height="387" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2164111178979126713?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2164111178979126713/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2164111178979126713' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2164111178979126713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2164111178979126713'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/04/vs2010.html' title='如何升級VS2010英文正式版'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/S8QkUwz6_JI/AAAAAAAAOS4/s3aL4-lJBj4/s72-c/image_thumb%5B10%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-6627742783762904769</id><published>2010-04-13T01:00:00.001+08:00</published><updated>2010-04-13T01:00:34.842+08:00</updated><title type='text'>Visual Studio 2010 goes live !</title><content type='html'>&lt;p&gt;2010.04.12，就在美國VS 2010發表會進行的同時，MSDN訂戶已經可以下載正式版了喔!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-6627742783762904769?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/6627742783762904769/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=6627742783762904769' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6627742783762904769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6627742783762904769'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/04/visual-studio-2010-goes-live.html' title='Visual Studio 2010 goes live !'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-8758838936724422137</id><published>2010-03-26T17:34:00.001+08:00</published><updated>2010-03-26T17:47:17.717+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='我的書'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Application = Code + Workflow</title><content type='html'>&lt;p&gt;從莫約10年前，我就在等這一天的來臨。&lt;/p&gt;  &lt;p&gt;程式設計，與電子電路的設計一樣，都是希望可以透過一些方式，將可以重複使用的功能元件化之後，方便重複使用。而在Test-Driven Developement當中，元件也是進行單元測試的重要單位。在設計電子電路時，我們可以透過一些方便的Layout軟體，幫助我們設計線路(流程)，並且測試結果：&lt;/p&gt;  &lt;p&gt;&lt;img src="http://3.bp.blogspot.com/__22FrdSXGA8/RX2SJeeSA4I/AAAAAAAAAAM/opmuiR1HAdo/s320/motor_pcb.gif" /&gt;&lt;/p&gt;  &lt;p&gt;(如果各位不是電子相關科系背景的，可以參考這一篇：&lt;a href="http://www.mobile01.com/topicdetail.php?f=300&amp;amp;t=533106"&gt;http://www.mobile01.com/topicdetail.php?f=300&amp;amp;t=533106&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;然而，在程式設計這一個領域中，我們卻仍然像是大一電子實驗一樣，拿著麵包版在做勞作：&lt;/p&gt;  &lt;p&gt;&lt;img alt="面包板" src="http://www.netnoease.com/image/200808/20080827133653464.jpg" width="240" height="138" /&gt;&lt;/p&gt;  &lt;p&gt;當BziTalk Server出現之後，Orchestration Designer提供了圖形化的操作介面，讓開發人員可以透過圖形化的方式，快速的將應用程式的工作流程設計出來，並且應用在系統整合的情境當中。從那時開始，我每次上BizTalk Server的課，就要向大家說：&amp;quot;圖形化操作才是程式設計的王道啊!!!&amp;quot; -- 無奈大家Coding 習慣了，對於我所描述的情境似乎無法想像。&lt;/p&gt;  &lt;p&gt;但隨著網際網路應用程式與雲端技術的發展，系統的複雜度已非以往的程式設計觀念可以滿足；同樣的，為了維持軟體的開發品質以及降低維護成本，我們也必須要有更好的方式可以快速的去檢視程式碼的內容。因此，Windows Workflow Foundation (WF)誕生了!&lt;/p&gt;  &lt;p&gt;在我的上一本書當中，曾經為各位介紹WF在.NET 3.5當中的操作方式。隨著即將到來的.NET 4 + Visual Studio 2010，WF 4也提供了更直覺、也更像電子電路設計的操作方式，實現了 “&lt;strong&gt;Application = Code + Workflow&lt;/strong&gt;” 的境界! 例如，我們希望在程式啟動時，可以根據現在的系統時間，顯示不同的問候語。第一步，你可以先撰寫程式，將顯示不同問候語的程式，定義成不同的CodeActivity類別：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/S6x_c81_ANI/AAAAAAAAOQ8/T3pmQK1zpNo/s1600-h/image%5B30%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/S6x_dmBj4oI/AAAAAAAAORA/P7wb6b-SQTM/image_thumb%5B16%5D.png?imgmax=800" width="628" height="303" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;CodeActivity類別就是你的程式的最基礎執行單元&lt;/strong&gt;，在設計應用程式的流程時，這些CodeActivity類別會自動出現在工具箱中：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/S6x_eeRZHAI/AAAAAAAAORE/mLcr7ymPRV4/s1600-h/image%5B32%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/S6x_fCNNc4I/AAAAAAAAORQ/3JsF5IZLeWw/image_thumb%5B18%5D.png?imgmax=800" width="217" height="290" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;然後你就可以使用這些自訂的CodeActivity類別，加上WF 4內建的活動，設計出你需要的流程：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/S6x_f8Lx1mI/AAAAAAAAORc/GvfI6bAeNUM/s1600-h/image%5B33%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/S6x_gWXucwI/AAAAAAAAORg/h20q4rmNDN8/image_thumb%5B19%5D.png?imgmax=800" width="233" height="244" /&gt;&lt;/a&gt; &lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/S6x_hM_9LjI/AAAAAAAAORo/ddc4Xh61opI/s1600-h/image%5B36%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_pfobZznF9qw/S6x_h-wY8SI/AAAAAAAAORs/XNBTm8yP5TA/image_thumb%5B22%5D.png?imgmax=800" width="644" height="292" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;然後，在流程中設定需要的一些變數，以及透過屬性視窗設定資料傳遞的規則：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/S6yCorILzmI/AAAAAAAAOSc/IntBC6nf4lw/s1600-h/image%5B46%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/S6yCpJA9bgI/AAAAAAAAOSg/cgB2HF7DhRs/image_thumb%5B30%5D.png?imgmax=800" width="644" height="283" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;最後，在程式碼中，透過WorkflowInvoker物件類別的Invoke方法，就可以載入工作流程定義並執行：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/S6x_kMZWsFI/AAAAAAAAOSA/hQN_V06FjRw/s1600-h/image%5B39%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/S6x_k7lhBrI/AAAAAAAAOSE/sMMBThrn9f4/image_thumb%5B25%5D.png?imgmax=800" width="598" height="149" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;執行結果如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/S6x_lwEFi7I/AAAAAAAAOSM/oFs7cIxVvTo/s1600-h/image%5B40%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/S6x_mSIRbnI/AAAAAAAAOSU/o5GFdC0DuI0/image_thumb%5B26%5D.png?imgmax=800" width="288" height="91" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;如何，是不是很簡單? &lt;/p&gt;  &lt;p&gt;同時，透過這樣的方式所設計出來的工作流程，將來也可以很容易直接的被引用到其他的工作流程中重複使用，自然的就有元件化與模組化的效果。而每一個單獨的CodeActivity類別與工作流程，因為都是獨立運作的單元，因此也很容易就可以透過Visual Studio 2010開發工具，進行單元測試，提升程式碼模組的可靠度。&lt;/p&gt;  &lt;p&gt;&amp;quot;&lt;strong&gt;Application = Code + Workflow&lt;/strong&gt;&amp;quot; 將會是 .NET 4 應用程式開發當中，相當重要的觀念與技巧。更多的實作與應用方式分享，我將會寫在我的下一本 &amp;quot;Visual C# 2010&amp;quot;的書當中。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-8758838936724422137?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/8758838936724422137/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=8758838936724422137' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8758838936724422137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8758838936724422137'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/03/application-code-workflow.html' title='Application = Code + Workflow'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/__22FrdSXGA8/RX2SJeeSA4I/AAAAAAAAAAM/opmuiR1HAdo/s72-c/motor_pcb.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-6906077868866446374</id><published>2010-02-26T21:48:00.001+08:00</published><updated>2010-02-27T11:55:15.951+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>雲端運算講座 – 如何使用Windows Identity Foundation 在雲端架構中實作Federation驗證服務</title><content type='html'>&lt;p&gt;在2/25號的講座中，我為大家介紹了Windows Identity Foundation，以及在Windows Azure雲端平台中實作Federation的架構設計。有興趣的朋友可以到下面的連結下載當天的講義：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://docs.google.com/leaf?id=0B7ogWwuOYS2zZTRjNGIxYTEtOTcwYy00MzUyLWIwOTEtY2I0NDA2ZWFjNWE4&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50"&gt;下載講義&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;由於時間的關係，當天的研討會只能為大家先介紹WIF這一個新技術，以及針對Federation的驗證/授權架構設計，做一些入門的介紹。如果大家對於導入WIF技術，簡化Web應用程式以及WCF服務驗證/授權方式有興趣的話，可以先試著用當天研討會所提到的，身分證驗證的原理來思考，如何才可以 &amp;quot;簡化&amp;quot; 你所遇到的問題。有實務上的需求時，歡迎提出來一起研究。&lt;/p&gt;  &lt;p&gt;Federation的驗證觀念，對於第一次接觸的開發人員而言，通常需要一段時間，才能設計出合適的解決方案。如果有機會的話，我也會再繼續更深入的分享我在這部分的研究心得，包括WS-Security、WS-Federation、SAML ... 等等。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-6906077868866446374?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/6906077868866446374/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=6906077868866446374' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6906077868866446374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/6906077868866446374'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/02/windows-identity-foundation-federation.html' title='雲端運算講座 – 如何使用Windows Identity Foundation 在雲端架構中實作Federation驗證服務'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1599311695736111157</id><published>2010-02-06T00:39:00.001+08:00</published><updated>2010-02-06T01:17:43.297+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure 設計概念</title><content type='html'>&lt;p&gt;這一篇是寫給想要了解如何導入Windows Azure技術的入門文章，釐清一些觀念。&lt;/p&gt;  &lt;p&gt;WIndows Azure Platform( &lt;a href="http://windows.azure.com"&gt;http://windows.azure.com&lt;/a&gt; ) 是微軟所提供的雲端作業平台，其中包含了三個主要的服務：&lt;/p&gt;  &lt;p&gt;1. Windows Azure：提供雲端系統開發前端(Front-End)介面所需要的平台服務，裡面又可以分為Web Role與Worker Role兩個不同的執行環境。Web Role 提供了與ASP.NET相容的執行環境，可以做為雲端系統與使用者或是用戶端應用程式繫結的環境；而Worker Role 則是提供了與Windows Service相似的執行環境，可以用來執行批次的工作。&lt;/p&gt;  &lt;p&gt;2. SQL Azure：提供雲端系統暫存交易資料的資料庫服務，像是產品的型錄資料，或是雲端流程處理中的狀態資料等，都可以存放在這裡。SQL Azure也可以與企業系統的資料庫同步，並且&lt;strong&gt;&lt;font color="#ff0000"&gt;將雲端系統處理完成的資料更新回企業系統的資料庫中&lt;/font&gt;&lt;/strong&gt;。&lt;/p&gt;  &lt;p&gt;3. AppFabic：提供了Access Control 與Service Bus 兩大服務。Access Control提供了雲端系統實作存取控制所需要的環境；而Service Bus，扮演的就是與BizTalk Server類似的服務匯流排角色，可以執行跨應用程式的整合流程。兩者合起來，就可以在雲端建立跨應用程式的分散式系統架構後端所需要的執行環境。&lt;/p&gt;  &lt;p&gt;這些雲端服務與企業現有的系統在功能上類似，但是因為是在雲端執行，因此在開發模式上會稍有不同；而雲端系統的設計架構與一般企業系統相比，更是大相逕庭。因此要&lt;font color="#ff0000"&gt;&lt;strong&gt;導入Windows Azure Platform時，千萬不要有：&amp;quot;我要如何將現有的系統完整套用到Windows Azure Platform當中&amp;quot; 這種錯誤的想法 !&lt;/strong&gt;&lt;/font&gt; 抽象一點來說，如果企業中的系統像是一條一條的高速公路，雲端系統就會像是飛機，我想沒有人會想開著飛機在高速公路上，從台北開到高雄的吧? 你必須要建個飛機場，讓飛機有起降的地方，才可以發揮她最大的效用，也才可以載著貨物飛到其他國家的，不是嗎 ? &lt;/p&gt;  &lt;p&gt;若是要導入Windows Azure Platform 的技術，必須要思考的方向是：&lt;/p&gt;  &lt;p&gt;1. 功能面：&lt;font color="#ff0000"&gt;&lt;strong&gt;並非所有系統的功能都適合上雲端&lt;/strong&gt;&lt;/font&gt;。以網路訂票系統來說，訂票的操作介面以及處理訂票的流程可以在雲端執行；帳務的管理還是可以由雲端同步回企業內的系統管理。&lt;/p&gt;  &lt;p&gt;2. 延展性：Windows Azure Platform可以隨時根據需求，調整執行的instance數目。以網路訂票系統來說，平日每小時平均可能只要處理500筆交易，但是遇到年節，系統使用量可能會短暫爆增到每分鐘平均1000筆以上交易。Windows Azure Platform 可以透過設定，隨時跟據系統需求彈性延展，企業就不需要為了滿足這些不常發生的爆量，浪費 IT投資。&lt;/p&gt;  &lt;p&gt;3. 維護性：這應該不用說了，由微軟的人管理伺服器，就不用每次Server上patch或是安裝新版的Service Pack，還要擔心會不會有問題。&lt;/p&gt;  &lt;p&gt;4. 成本：我不會告訴各位使用Windows Azure Platform 一定便宜，但是對於中小型網路新興產業來說，可以隨著產品的市場規模彈性調整部署，又省去了租機房機器的建置成本，相對的會降低很多老闆的壓力。&lt;/p&gt;  &lt;p&gt;綜合前面幾點，最合適開發在Windows Azure Pltaform 的功能，應該是&lt;font color="#ff0000"&gt;&lt;strong&gt;需要處理大量來自用戶端的交易需求&lt;/strong&gt;&lt;/font&gt;。例如宅配或是物流業，就可以利用Windows Azure建置貨物追蹤的系統，並將追蹤的資料暫存於SQL Azure中；等到貨物送達之後，再將追蹤記錄同步回企業內歸檔。如果搭配AppFabic，還可以更進一步整合 Partner的系統，在雲端設計流程作自動配送的處理。而隨著業務的成長，或是特殊節日的需求，你更可以隨時彈性調整系統所需要的雲端環境。&lt;/p&gt;  &lt;p&gt;最後，還有兩點：&lt;/p&gt;  &lt;p&gt;1. Windows Azure Platform 讓你可以建立高可靠度與延展性的分散式系統，但是並沒有保證高效能(也沒人敢保證這種)。若是要達到良好效能，分散系統還是必須要自己做調教。&lt;/p&gt;  &lt;p&gt;2. SQL Azure不是讓你將 &amp;quot;所有&amp;quot; 的系統資料庫都搬上去使用的，請參考前面標紅字的說明。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1599311695736111157?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1599311695736111157/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1599311695736111157' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1599311695736111157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1599311695736111157'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/02/windows-azure.html' title='Windows Azure 設計概念'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-356603036505234135</id><published>2010-01-11T14:25:00.001+08:00</published><updated>2010-01-11T14:25:39.213+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><title type='text'>雲端運算講座 - 如何使用Windows Identity Foundation在雲端架構中實作Federation驗證服務</title><content type='html'>&lt;p&gt;時間：2010年2月25號 15:15 ~ 17:00&lt;/p&gt;  &lt;p&gt;地點：台灣微軟7A/7B 會議室&lt;/p&gt;  &lt;p&gt;活動網頁：&lt;a href="http://msdn.microsoft.com/zh-tw/ee940541.aspx"&gt;http://msdn.microsoft.com/zh-tw/ee940541.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;這一場主要會介紹微軟最新的WIF(Windows Identity Foundation)的技術，以及如何利用WIF來簡化在雲端架構中，使用者驗證與授權的機制。因為難度設定是200(入門級)，因此只要是使用過Visual Studio 的開發人員，都歡迎來參加。比較進階的開發課題與經驗分享，我會再陸續的分享給大家。&lt;/p&gt;  &lt;p&gt;今天有高雄的朋友詢問為什麼只辦在台北? 我想大家可以透過管道向微軟反應，我想他們是很願意聽到開發人員的聲音的。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-356603036505234135?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/356603036505234135/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=356603036505234135' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/356603036505234135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/356603036505234135'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2010/01/windows-identity-foundationfederation.html' title='雲端運算講座 - 如何使用Windows Identity Foundation在雲端架構中實作Federation驗證服務'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-8259487020091705023</id><published>2009-11-25T02:49:00.001+08:00</published><updated>2009-11-25T02:50:09.220+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Web (WCF) Service的設計考量 (1) - 基本觀念</title><content type='html'>&lt;p&gt;繼續談談 SOA Service Layer方面的設計考量。&lt;/p&gt;  &lt;p&gt;前一篇網誌文章中提到，通常有跨平台整合、或是需要透過網路提供遠端存取的共用元件，通常才會考慮建立成為Web Service。除此之外，在設計Web Service的時候，也有些需要注意的基本概念。&lt;/p&gt;  &lt;p&gt;Web Service雖然是透過服務介面(interface)與用戶端程式繫結，然而就跟一般應用程式一樣，每個Web Service所提供的功能是獨立的，而且與一般應用程式一樣，採用層級的架構設計。Web Service基本的層級架構如下圖：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/SwwqlZHUNSI/AAAAAAAAM8Q/HaGvrHJgUxQ/s1600-h/image8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/SwwqmKSBbHI/AAAAAAAAM8U/wFbbU-c1DkE/image_thumb6.png?imgmax=800" width="334" height="484" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;在設計時，必須盡可能的將 Data Layer 與 Business Layer分別封裝在不同的元件中，並且各層級之間再透過抽象的介面結合。一般來說，後端的元件可以製作成Shared Component，再提供給內部的其他系統整合時使用。&lt;/p&gt;    &lt;p&gt;而開發Service Layer時，必須要把Service Contract、Service Implementation、Data Contract 等等，分別定義到不同的組件中。換句話說，&lt;u&gt;&lt;font color="#ff0000" size="3"&gt;你並不應該使用Visual Studio 開發工具新增一個預設的Web Service或是WCF Service專案之後，就只用這一個專案完成所有Service Contract、Service Implementation、Data Contract 的開發&lt;/font&gt;&lt;/u&gt;；正確的做法應該是另外再建立不同的ClassLibrary專案來開發與維護不同用途的服務元件。這樣的做法可以讓你將來需要調整服務的內容時，可以擁有比較高的彈性；同時也可以比較容易進行單元測試，確保Web Service的穩定性。&lt;/p&gt;    &lt;p&gt;同時，也必須要注意到，每個 Web Service 同時也會是一個獨立的應用程式，用戶端程式必須要透過 Service Layer所定義的介面(服務合約)，才可以使用其功能。而 Web Service 之間若是需要整合的話，可以透過下面幾種方式：&lt;/p&gt;    &lt;p&gt;1. 若是後端資源(如：資料來源)方面的整合，可以透過 Data Layer所提供的Shared Assembly：&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_pfobZznF9qw/SwwqnMogiQI/AAAAAAAAM8o/cplcMNx6Lew/s1600-h/image%5B16%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_pfobZznF9qw/SwwqnwtJLJI/AAAAAAAAM8w/HX9__Y50rRs/image_thumb%5B9%5D.png?imgmax=800" width="644" height="400" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;而通常這種方式，因為跳過了 Business Layer，所以僅能做比較邏輯較單純的資料異動。&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt; 2. 若是要進行功能面的整合，則必須要透過 ESB(Enterprise Service Bus)，或是再建立一個更上層的 Web Service 來完成；而不是在 Web Service 之間直接建立交互參照：&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_pfobZznF9qw/Swwqordga-I/AAAAAAAAM80/5TX15idtEjk/s1600-h/image%5B18%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_pfobZznF9qw/Swwqpcc994I/AAAAAAAAM88/soef4OccOpc/image_thumb%5B11%5D.png?imgmax=800" width="391" height="484" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;舉例來說，假設 Service A 是庫存系統的服務，提供產品庫存查詢與異動的介面；而 Service B 是訂單管理系統的服務，提供新增訂單與訂單異動的介面。而若是需要整合客戶系統提供即時下單功能時，就應該另外建立一個新的Service C，並且把處理訂單的流程( Business Workflow)封裝到新服務的功能當中。這樣的架構會比你在Service A 和 B之間建立交互參照來得有彈性，而且也較容易維護多變且複雜的商業流程。&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-8259487020091705023?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/8259487020091705023/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=8259487020091705023' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8259487020091705023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8259487020091705023'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/11/web-wcf-service-1.html' title='Web (WCF) Service的設計考量 (1) - 基本觀念'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/SwwqmKSBbHI/AAAAAAAAM8U/wFbbU-c1DkE/s72-c/image_thumb6.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-8820233710824776827</id><published>2009-11-22T02:37:00.001+08:00</published><updated>2009-11-22T02:37:39.796+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Private Component、Shared Component and Web Service</title><content type='html'>&lt;p&gt;SOA (Service Oriented Architecture) 與雲端運算是目前相當熱門的話題，最近看了一些 design，有些感想。&lt;/p&gt;  &lt;p&gt;先請問各位，private component、shared component與 web service，有甚麼相同之處 ?&lt;/p&gt;  &lt;p&gt;原則上，這三種都是用來封裝可以重複使用的程式邏輯的技術：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;u&gt;Private component&lt;/u&gt; 的組件必須要放到應用程式的目錄中執行，一次僅可以分享給一個應用程式使用。&lt;/li&gt;    &lt;li&gt;&lt;u&gt;Shared component&lt;/u&gt; 則是必須要註冊到執行環境的GAC(Global Assembly Cache)中，可以提供給整台電腦的應用程式共用。應用程式在存取shared component時，必須指定所呼叫的組件版本。&lt;/li&gt;    &lt;li&gt;&lt;u&gt;Web Service&lt;/u&gt; 則是發布到網路上特定位置的公開介面(interface)，以單一應用程式的方式執行，提供用戶端程式可以透過網路存取程式邏輯。Web Service 是以訊息為導向(message-oriented)的溝通模式，因此用戶端應用程式在存取Web Service 時，必須要先取得Web Service的WSDL文件，並且根據WSDL文件建立服務要求，再取得服務的回應。&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;而很多人認為，所謂的 SOA，就是要把之前所有的共用元件，都做成Web Service或是WCF Service。於是乎東一個Service、西一個Service，最後不但效能不好，出問題也很難除錯 -- SOA的好處沒享受到，反而增加了很多維護的成本。當然，在目前這一個開發Web Service就像喝水一樣簡單的時代當中，很多人都會有這樣的誤解，因此選擇了錯誤的技術去解決問題，反而製造出更多的問題。&lt;/p&gt;  &lt;p&gt;我們以Data Access Componets來舉例，因為很多人導入SOA的第一個步驟，就是先從DAL著手。一般應用程式對於 Data Access Component 都會有幾個基本的需求：新增、修改、刪除、與查詢資料；當然，也包括了要做交易(transaction)的處理。若是你將 DAL實作成Web Service，你馬上就會面臨幾個問題：&lt;/p&gt;  &lt;p&gt;1. 無法進行交易。雖然微軟的MS-DTC 可以搭配WS-Transaction提供交易的支援，但若是要執行跨平台的交易處理，不是一般的開發人員可以容易實作與維護的。&lt;/p&gt;  &lt;p&gt;2. 存取資料效能變差。因為Web Service本身也是獨立的應用程式，因此會有自己的驗證/授權、建立執行環境等等邏輯需要執行，都會影響資料的存取速度。&lt;/p&gt;  &lt;p&gt;3. 維護成本增加。建立Web Service需要規劃新的部署與維護計畫，更重要的是，若是將來前端程式出錯，要除錯會是一個很大的災難。&lt;/p&gt;  &lt;p&gt;4. 透過Shared Component，用戶端應用程式執行環境是否安裝必要的元件，只需要從檔案總管就可以看出來；若是要更新介面，只需要安裝新版本的組件到production server上，很容易就可以讓新舊版本共存。然而對於Web Service來說，就不是那麼件容易的事。&lt;/p&gt;  &lt;p&gt;因此，對於大部分.NET的系統而言，Data Access Componet 其實只需要建立成Shared Components，將來部署到執行環境的機器中就夠了。會需要開發Web Service，一般有兩種情況：&lt;/p&gt;  &lt;p&gt;1. &lt;font color="#ff0000"&gt;&lt;strong&gt;跨平台整合元件的需求&lt;/strong&gt;&lt;/font&gt;。&lt;/p&gt;  &lt;p&gt;2. &lt;font color="#ff0000"&gt;&lt;strong&gt;透過網際網路直接存取元件的需求&lt;/strong&gt;&lt;/font&gt;。&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;font color="#ff0000"&gt;若是沒有這兩個前題，一般共用元件其實並不需要每個都做成Web Service&lt;/font&gt;&lt;/u&gt;。參考微軟針對Service Application中 Service的特性的描述如下：&lt;/p&gt;  &lt;p&gt;&amp;quot;Services support a heterogeneous environment by focusing interoperability at the message/interface definition.&amp;quot;&lt;/p&gt;  &lt;p&gt;下次，再跟大家繼續分享其他Web Service設計上還需要注意的其他地方。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-8820233710824776827?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/8820233710824776827/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=8820233710824776827' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8820233710824776827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8820233710824776827'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/11/private-componentshared-component-and.html' title='Private Component、Shared Component and Web Service'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-190686342864462816</id><published>2009-11-22T00:57:00.001+08:00</published><updated>2009-11-22T00:57:57.414+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>通過了 OCUP Intermediate 認證考試 ...</title><content type='html'>&lt;p&gt;把OMG的認證考試用書 (&lt;b&gt;&lt;a href="http://www.amazon.com/UML-Certification-Guide-Fundamental-Intermediate/dp/0123735858/ref=sr_1_1/104-6522369-5078368?ie=UTF8&amp;amp;s=books&amp;amp;qid=1192475524&amp;amp;sr=8-1"&gt;UML 2 Certification Guide: Fundamental &amp;amp; Intermediate Exams (The OMG Press)&lt;/a&gt;&lt;/b&gt;)裡面Intermediate考試的範圍整理過之後，上星期也順利的通過了OCUP Intermediate 的考試。&lt;/p&gt;  &lt;p&gt;基本上，OCUP 這兩級考試的範圍，都沒有超過認證用書的內容，也跟網站中所標示的一致。但是因為UML本身有很多抽象的定義，若是沒有一些UML 經驗，或是沒有接觸過UML 的人，直接看書或是UML Superstructure 的規格應該會是一頭霧水，更不用說是考試了。而考試本身其實並不會太難，主要的出題方向是在理解與應用的方面，因此不用硬去記metamodel，反而要花一些時間去理解metamodel對應到實際的UML notation 時，所表示的意義與特性。&lt;/p&gt;  &lt;p&gt;過一陣子整理完Advanced考試的範圍資料之後，再去挑戰最後一級的認證考試。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-190686342864462816?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/190686342864462816/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=190686342864462816' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/190686342864462816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/190686342864462816'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/11/ocup-intermediate.html' title='通過了 OCUP Intermediate 認證考試 ...'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2909872845903213539</id><published>2009-11-19T01:08:00.001+08:00</published><updated>2009-11-19T01:08:59.449+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>近況更新</title><content type='html'>&lt;p&gt;最近陸續接到一些讀者詢問有關於Silverlight 3的書是不是已經出的問題，特別在這裡說明一下。&lt;/p&gt;  &lt;p&gt;首先，很感謝悅知出版社的邀稿，讓我有機會把Silverlight到目前為止的研究心得有可以集結成冊的機會。但是幾經考慮之後，Silverlight 3的出書計畫還是在最後關頭停住了。主要有幾個原因：&lt;/p&gt;  &lt;p&gt;1. 微軟這次在Silverlight 3 SDK與Blend 3 中文版中所提供了相當多的資訊，這些資訊對於Silverlight 3的入門使用者來說，已經是相當足夠了。&lt;/p&gt;  &lt;p&gt;2. 這本書定位是在實戰的等級，但是剛好前陣子公司有重要的案子進行，沒有很多時間可以refine 書裡面的內容；為了維持品質，所以在取得編輯大人的諒解之後將這本書的出書計畫暫停了。&lt;/p&gt;  &lt;p&gt;當然，在這裡也要向等待的讀者致歉。不過出書計畫只是暫停，並沒有停止。目前新的計畫是：&lt;/p&gt;  &lt;p&gt;1. 關於Silverlight 3，我還是會持續透過&amp;quot;線上講堂&amp;quot; 與各位交流。&lt;/p&gt;  &lt;p&gt;2. 未來的bandwidth放在整理 .NET Framework 4.0 的範例與資料。未出版的Silverlight 3 的內容會與 .NET Framework 4.0 所提供的雲端運算服務整合成另外一本書，等級也是會定位在實戰的等級，以VS 2010為開發工具，做為學習完C#程式語言之後，可以延伸學習的進階書籍。&lt;/p&gt;  &lt;p&gt;而從我上一篇分享的網誌中，大家應該也可以嗅到了未來微軟的開發平台將會與UML有更緊密的結合(請參考 &amp;quot;&lt;a href="http://www.microsoft.com/presspass/press/2008/sep08/09-10OMGModelingPR.mspx"&gt;Microsoft Focuses on Bringing Modeling Mainstream, Improves IT Delivery of Business Strategies&lt;/a&gt;&amp;quot;)。因此最近正透過參加OCUP認證考試，複習與整理UML的相關知識，希望可以繼續提供大家更多充實的內容。也因為準備考試的關係，所以最近網誌內容更新的比較慢一點，敬請見諒；當然，如果各位有問題或是想要我分享的內容，都歡迎繼續留言與我聯絡，謝謝。&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2909872845903213539?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2909872845903213539/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2909872845903213539' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2909872845903213539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2909872845903213539'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/11/blog-post.html' title='近況更新'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7492663326095089382</id><published>2009-11-15T15:45:00.001+08:00</published><updated>2009-11-15T15:45:39.878+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><title type='text'>通過了OMG Certified UML Professional (OCUP) Fundamental 認證</title><content type='html'>&lt;p&gt;&lt;font size="3"&gt;OCUP(OMG Certified UML Professional)，是目前主導UML(Unified Modeling Language) 規格發展的國際組織 OMG (是 &amp;quot;&lt;a href="http://www.omg.org" target="_blank"&gt;Object Management Group&lt;/a&gt;&amp;quot;，不是&amp;quot;Oh, My God !&amp;quot;) 所推廣的UML認證。比起Microsoft或是Sun Java等大廠的認證來說，在台灣算是比較冷門的認證。然而以UML本身來說，卻是你在任何專案的文件當中，都一定會看到、用到的東西；因此就算沒有了解全部的UML文件規格，也至少會在文件中看過Class Diagram、Use case Diagram 等基本的UML圖。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;目前系統開發的分工越來越細，拜SOA發展所賜，系統的執行環境與架構也越來越複雜，一般公司的系統外包給協力廠商開發或是透過雲端系統執行，已漸漸變成了趨勢。而要將系統外包給協力廠商開發，就必須要在系統進入開發測試階段之前，透過UML建立起完整的系統模型。此時，你就不能只是 &amp;quot;會用&amp;quot; UML的階段，還必須要 &amp;quot;了解&amp;quot; UML，專案才有辦法在發包之前確定規格以及找出問題。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;理論上，UML 是以圖形化方式描述系統的架構，應該是相當容易了解；但是往往大家在應用的時候，就會出現一些盲點。例如有多少人可以正確的告訴我，下面這兩張圖所代表的意義跟差異?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_pfobZznF9qw/Sv-xoENci8I/AAAAAAAAMgc/1mNHOxV0jZQ/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_pfobZznF9qw/Sv-xoj3kuII/AAAAAAAAMgg/fDIWXDdfHgc/image_thumb%5B3%5D.png?imgmax=800" width="399" height="236" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;另外一個常看到的問題是， 當 SA/SD 使用UML完成設計之後，因為開發人員或是協力廠商對於 UML的規格不熟悉，誤解了系統文件中設計的內容，而做出了錯誤的東西。因此若是要導入 UML，除了SA/SD 人員一定要熟悉 UML的規格之外，開發人員也必須要對 UML 有一定程度的了解，才能夠成功。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt; Microsoft 近幾年來，也慢慢的開始與這些軟體工程的公開標準整合。像是BizTalk Server 2006就支援了BPEL(Business Process Execution Language)；在WF中 透過設計工具就可以以建立類似 UML 的Active Diagram、State Diagram的方式，建立程式的流程。在 &amp;quot;&lt;a href="http://www.microsoft.com/presspass/press/2008/sep08/09-10OMGModelingPR.mspx" target="_blank"&gt;Microsoft Focuses on Bringing Modeling Mainstream, Improves IT Delivery of Business Strategies&lt;/a&gt;&amp;quot; 中，微軟也正式的宣布加入OMG組織；並且在VS 2010中，加入了 &amp;quot;Modeling Projects&amp;quot; 的專案範本 -- 換句話說，你可以直接使用 VSTS 2010 建立專案的 UML 文件，並且透過 TFS 加入專案中管理。關於這部分，以後會再慢慢跟大家分享。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;而 OCUP，就是用來證明你對 UML 規格了解程度的認證。OCUP 認證分成三級，你&lt;/font&gt;&lt;font size="3"&gt;可以根據在專案中所扮演角色的角色，決定你要考到哪一個等級。每個等級的詳細說明在網站(&lt;a href="http://www.omg.org/uml-certification/index.htm"&gt;http://www.omg.org/uml-certification/index.htm&lt;/a&gt;) 上介紹的很清楚，各位如有興趣可以自行參考；一般開發人員應該考過初級(Fundamental)就可以了。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;準備 OCUP 的考試，其實也不太難，因為UML的規格其實在規格書當中定義的相當清楚 -- 但也就是因為太清楚了，所以看起來會有點辛苦。OMG 自己有出版一本認證教材，整理的很詳細，解釋的也很清楚：&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;img alt="UML 2 Certification Guide" src="http://www.omg.org/uml-certification/images/books-1.jpg" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;a href="http://www.amazon.com/UML-Certification-Guide-Fundamental-Intermediate/dp/0123735858/ref=sr_1_1/104-6522369-5078368?ie=UTF8&amp;amp;s=books&amp;amp;qid=1192475524&amp;amp;sr=8-1"&gt;UML 2 Certification Guide: Fundamental &amp;amp; Intermediate Exams (The OMG Press)&lt;/a&gt;&lt;/b&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; by Tim Weilkiens and Bernd Oestereich&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;這本書很有系統的介紹了 UML 的規格，以及整理了 OCUP 考試所需要了解的重點。就算你沒有要考 OCUP 認證，這本書中的經典範例也可以幫助你深入學習 UML，我個人認為這是每一個導入UML 的專案團隊所必備的一本工具書。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7492663326095089382?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7492663326095089382/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7492663326095089382' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7492663326095089382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7492663326095089382'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/11/omg-certified-uml-professional-ocup.html' title='通過了OMG Certified UML Professional (OCUP) Fundamental 認證'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_pfobZznF9qw/Sv-xoj3kuII/AAAAAAAAMgg/fDIWXDdfHgc/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2138404900310534220</id><published>2009-09-28T13:31:00.001+08:00</published><updated>2009-09-30T16:52:58.471+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Silverlight 3 與ASP.NET MVC</title><content type='html'>&lt;p&gt;TechDays 2009 會後，有學員問我說：&amp;quot;老師，請問一下Silverlight 3 是不是不可以用在ASP.NET MVC 當中 ?&amp;quot;。&lt;/p&gt;  &lt;p&gt;事實上，對於Silverlight 3的Web 應用程式開發來說，整合ASP.NET MVC可以減少很多開發和維護上的effort；相對的，以Silverlight 3 做為ASP.NET MVC 的前端開發技術，也是相當合適的。&lt;/p&gt;  &lt;p&gt;在 &amp;quot;&lt;a href="http://john-publish.blogspot.com/2008/08/2.html"&gt;微軟新一代分散式架構與網際網路開發技術剖析(2)&lt;/a&gt;&amp;quot; 這一篇網誌中，曾為大家剖析過MVC 架構在ASP.NET 的技術中，必須要搭配ASP.NET AJAX 來進行實作。然而，就如同我在TechDays 的場次中為各位說明過的，ASP.NET AJAX 主要仍是以整合ASP.NET Server Control 為考量，因此在發展MVC架構中的展示層(View)，或是以用戶端操作經驗為主的RIA應用程式時，就會出現比較多的一些限制。&lt;/p&gt;  &lt;p&gt;因此，下面是我的看法：&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;&amp;quot;&lt;/font&gt;&lt;strong&gt;以Silverlight 3 做為開發ASP.NET MVC 展示層操作介面的主要技術，不但可以讓你更容易建立高互動性的使用者操作介面，更可以透過ASP.NET MVC 所建立的伺服器端環境，簡化Silverlight 3應用程式在伺服器端的開發與維護工作&lt;font color="#000000"&gt;&amp;quot;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;兩種技術可以說是相輔相成的!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2138404900310534220?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2138404900310534220/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2138404900310534220' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2138404900310534220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2138404900310534220'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/09/silverlight-3-aspnet-mvc.html' title='Silverlight 3 與ASP.NET MVC'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7735455724104905739</id><published>2009-09-28T00:40:00.001+08:00</published><updated>2009-09-28T00:40:28.752+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>TechDays 2009 – Silverlight 3 應用與導入(範例1與2)</title><content type='html'>&lt;p&gt;我在TechDays 2009的 &amp;quot;Silverlight 3應用與導入&amp;quot;的場次當中，針對SIlverlight 3的協同開發做了初步的介紹，後續也有許多朋友跟我詢問有關於Silverlight3 的開發相關的問題，可見大家對於導入Silverlight 3 開發企業的Web應用程式都很有興趣。&lt;/p&gt;  &lt;p&gt;的確，對於Silverlight 3的Web應用程式發展而言，企業內部比較容易有可以控制的用戶端環境，而且很多RIA應用程式的開發需求其實也是從內部系統來的。導入Silverlight 3在加上ASP.NET MVC，可以讓你很容易開發需要的Web 應用程式和後端的網路服務整合。&lt;/p&gt;  &lt;p&gt;附件是我在TechDays 2009中所實作的的第一個與第二個範例。其實對於學習Silverlight 3應用程式開發來說，複製範例回去看XAML或是程式碼內容，對於學習是沒甚麼太大的效果的--就跟BizTalk應用程式的開發一樣。因此即便是在千人的演講場次中，我也堅持要用live demo而非開程式碼的方式介紹，這樣大家才可以學到正確的開發步驟。當然，時間有限，所以詳細的Silverlight 3開發觀念與技巧我會在整理到下個月的書當中。&lt;/p&gt; &lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-155f8cb309a06348.skydrive.live.com/embedicon.aspx/TechDays%202009/HelloSilverlight.rar" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-155f8cb309a06348.skydrive.live.com/embedicon.aspx/TechDays%202009/Silverlight02.rar" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7735455724104905739?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7735455724104905739/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7735455724104905739' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7735455724104905739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7735455724104905739'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/09/techdays-2009-silverlight-3-12.html' title='TechDays 2009 – Silverlight 3 應用與導入(範例1與2)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-5654219342839248097</id><published>2009-09-24T22:41:00.002+08:00</published><updated>2009-09-24T23:03:05.403+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='我的書'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 技術文件'/><category scheme='http://www.blogger.com/atom/ns#' term='研討會'/><title type='text'>TechDays 2009 - Silverlight 3 應用與導入實務</title><content type='html'>&lt;br /&gt;9月23號在微軟的TechDays 2009研討會中介紹了&amp;quot;Silverlight 3應用與導入實務&amp;quot;，有興趣的朋友可以從下面的連結下載演講的Silde 參考。當天的範例我也會陸續的分享出來，如果大家對於使用Silverlight 3 開發Web應用程式有興趣或是需求的話，下個月我將會透過悅知出版社出版一本&amp;quot;&lt;strong&gt;Silverlight 3 Web應用程式開發實戰&lt;/strong&gt;&amp;quot;，屆時各位可以用來做為開發時的參考。&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-155f8cb309a06348.skydrive.live.com/embedicon.aspx/TechDays%202009" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;div&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div&gt;   &lt;br /&gt;&lt;img style="width: 195px; height: 262px; cursor: hand" id="BLOGGER_PHOTO_ID_5385048409337056610" border="0" alt="" src="http://2.bp.blogspot.com/_pfobZznF9qw/SruI_0DRTWI/AAAAAAAALIE/ScqJYmPxEbE/s400/Book.jpg" /&gt; &lt;a href="http://lh6.ggpht.com/_pfobZznF9qw/SruJ4aORYFI/AAAAAAAALIM/dcLLPQ4LkNY/s1600-h/08%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Office封面-完稿 [轉換]" border="0" alt="Office封面-完稿 [轉換]" src="http://lh6.ggpht.com/_pfobZznF9qw/SruJ5SshZUI/AAAAAAAALIQ/Ei6XbFvMgGU/08_thumb%5B1%5D.jpg?imgmax=800" width="219" height="261" /&gt;&lt;/a&gt; &lt;/div&gt;  &lt;div&gt;   &lt;br /&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-5654219342839248097?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/5654219342839248097/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=5654219342839248097' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5654219342839248097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/5654219342839248097'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/09/techdays-2009-silverlight-3.html' title='TechDays 2009 - Silverlight 3 應用與導入實務'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_pfobZznF9qw/SruI_0DRTWI/AAAAAAAALIE/ScqJYmPxEbE/s72-c/Book.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2633838116841181844</id><published>2009-07-13T11:01:00.001+08:00</published><updated>2009-07-13T11:01:40.451+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>移除Windows Service</title><content type='html'>&lt;p&gt;移除Windows Service的幾種方式：&lt;/p&gt;  &lt;p&gt;1. 新增/移除程式:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;一般開發Windows Service專案時都會搭配開發Installer 跟Setup Project, 所以在大部分的狀況之下安裝好的Windows Service 都可以從[控制台]--&amp;gt;[新增/移除程式]中移除。但是要記得的是：&lt;font color="#ff0000"&gt;&lt;strong&gt;一定要先將服務停止之後再移除&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt;--否則就要用到最後的大絕招了。&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. InstallUtil.exe&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;在開發階段，你也可以直接呼叫&lt;a href="http://msdn.microsoft.com/zh-tw/library/50614e95.aspx" target="_blank"&gt;InstallUtil.exe&lt;/a&gt; 工具程式幫忙新增/移除 Wundows Service，這樣就可以省去建立Setup project的時間。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;3. SC.exe&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;SC.exe 是Windows作業系統中管理Windows Service 的一個工具程式，可以用來建立、啟動、停止跟刪除Windows Service。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;4. Regedit.exe&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;看到這工具程式名稱，應該就知道大絕招是什麼了。當你移除Windows Service時，若是沒先將Windows Service以及其關聯的服務停止，有時還是可以移除，但是Windows作業系統中的註冊資訊還是會繼續存在，下次你要在崇裝服務時就會出現錯誤訊息。如果是這樣的話，就要使用Regedit.exe 工具程式，刪除在 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 裡面的服務註冊資訊，然後再重新開機，這樣就可以將Windows Service 清除乾淨了。&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2633838116841181844?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2633838116841181844/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2633838116841181844' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2633838116841181844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2633838116841181844'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/07/windows-service.html' title='移除Windows Service'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4534913303359148580</id><published>2009-07-07T18:32:00.001+08:00</published><updated>2009-07-07T18:32:35.405+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>如何在.NET程式中存取與設定資料夾與檔案的存取權限 (ACL)</title><content type='html'>&lt;p&gt;在悅知出版社的網站中分享了一篇如何利用 .NET程式存取及修改資料夾存取權限的文章，有興趣的朋友可以點選下面的連結參考這一篇文章：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.delightpress.com.tw/article_c.aspx?article_id=43" target="_blank"&gt;如何在.NET程式中存取與設定資料夾與檔案的存取權限 (ACL)&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4534913303359148580?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4534913303359148580/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4534913303359148580' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4534913303359148580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4534913303359148580'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/07/net-acl.html' title='如何在.NET程式中存取與設定資料夾與檔案的存取權限 (ACL)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-3893273508701613897</id><published>2009-07-07T00:04:00.001+08:00</published><updated>2009-07-07T00:04:33.152+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='我的書'/><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>2009 微軟最有價值專家 (Microsoft Most Valuable Professional，MVP)</title><content type='html'>&lt;p&gt;&lt;font size="3" face="微軟正黑體"&gt;在7月2號，收到微軟所寄來的通知：&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;親愛的微軟「最有價值專家」(MVP)，您好︰&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;在歷經長達數星期的激烈競爭與評選，恭禧您從眾多優秀的競爭者中脫穎而出，成為 2009年第四季微軟「最有價值專家」(Most Valuable Professional, MVP)！微軟技術社群暨最有價值專家全球總監 Nestor Portillo，及微軟技術社群暨最有價值專家亞太及大中華區 (APAC) 總監Howard Lo，帶領全微軟技術社群暨最有價值專家部門同仁，在此恭禧您！&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;微軟「最有價值專家」(MVP)是贏得微軟技術社群討論區、論壇參與者肯定的最高榮譽，同時也讓廣大的微軟技術討論區、論壇參與者認識到您的貢獻是極具價值的！&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="微軟正黑體"&gt;回顧過去這半年來，因為換工作所以在很多地方都做了調整，唯一沒有調整的就是對於吸收新知識的熱情。當然，換了新的工作也讓我有更多的經驗可以跟大家分享。未來這一年微軟陸續會有很多新的、重要的開發技術與工具會陸續推出，我也將繼續為大家介紹與分享這一些技術!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="微軟正黑體"&gt;附上2009年第四季微軟最有價值專家的當選名單，也恭喜這一些一起得獎的專家!&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;當選名單&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;趙敏翔，王作桓，王仲麒，王寧疆，朱泰銓，游佩諭&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;陳景忠，何偉碩，陳少華，柯博安，王恩琦，鄭祿盛&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;簡浩洋，呂高旭，張俊宜，傅嘉賢，林柏甫，郭智誠&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;陳明倫，&lt;strong&gt;&lt;u&gt;&lt;font color="#ff0000"&gt;張書源&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;，黃燕忠，張智榮，蘇晉正，歐志信&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="微軟正黑體"&gt;&lt;em&gt;農令辰，洪子寓&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-3893273508701613897?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/3893273508701613897/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=3893273508701613897' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3893273508701613897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3893273508701613897'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/07/2009-microsoft-most-valuable.html' title='2009 微軟最有價值專家 (Microsoft Most Valuable Professional，MVP)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-7884506666458620942</id><published>2009-04-23T23:48:00.001+08:00</published><updated>2009-04-23T23:48:11.226+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><title type='text'>初窺 BizTalk Server 2009</title><content type='html'>&lt;p&gt;&lt;font size="3"&gt;最近Micrisift Virtual Lab 發布了三個新的BizTalk Server 2009的Workshop：&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9662255"&gt;BizTalk Server 2009: Building your first BizTalk Solution&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9662256"&gt;BizTalk Server 2009: Processing Flat Files&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/?linkid=9662257"&gt;BizTalk Server 2009: Working with Maps&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;雖然已經不需要再教BizTalk Server的課程了，不過這個我從小教到大(BizTalk Server Technical Preview ~ BizTalk Server 2006 R2) 的產品有了新的版本，總是會讓人有些期待 - 看看又有哪些新的東西加了進去。先跟大家分享一下從Microsoft Virtual Lab所準備的環境中目前所看到的一些新東西：&lt;/p&gt;  &lt;p&gt;1. 基本上，主要的功能都和BizTalk Server 2006 R2差不多，一樣提供了對於RFID模組的支援。&lt;/p&gt;  &lt;p&gt;2. 整合Visual Studio 2008 開發環境，可以透過Visual Studio 2008開發工具建立BizTalk Server專案。比較有趣的是可以針對Map的XSLT進行中斷點偵錯，以及可以建立Unit Test執行BizTalk Component的單元測試。&lt;/p&gt;  &lt;p&gt;3. 提供升級精靈，可以將BizTalk Server 2006的專案升級成BizTalk Server 2009的專案再部署到新環境中。這一點我想問題應該不大，因為BizTalk Server 2006早就支援業界的XML標準，因此升級精靈應該是針對Visual Studio的專案範本升級。&lt;/p&gt;  &lt;p&gt;大家如果有興趣，也可以點選上面的連結進去玩玩看 !&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-7884506666458620942?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/7884506666458620942/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=7884506666458620942' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7884506666458620942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/7884506666458620942'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/04/biztalk-server-2009.html' title='初窺 BizTalk Server 2009'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-3093534291284087833</id><published>2009-03-26T13:27:00.001+08:00</published><updated>2009-03-26T13:27:52.629+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><title type='text'>何謂軟體即服務(SaaS)?</title><content type='html'>&lt;p&gt;軟體即服務(Software as a Service,SaaS)，或是微軟所提出的Software + Service，都是屬於新一代雲端運算的架構。雖然推出很久了，但是還是很多人對它還是一知半解。剛好最近寫了一篇相關的文章發表在悅知出版社的網站上，各位有興趣的話可以上去看一下：&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.delightpress.com.tw/article_c.aspx?article_id=41" href="http://www.delightpress.com.tw/article_c.aspx?article_id=41"&gt;http://www.delightpress.com.tw/article_c.aspx?article_id=41&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-3093534291284087833?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/3093534291284087833/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=3093534291284087833' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3093534291284087833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3093534291284087833'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/03/saas.html' title='何謂軟體即服務(SaaS)?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-8283401654971531109</id><published>2009-02-04T17:02:00.001+08:00</published><updated>2009-02-04T17:02:09.765+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>Windows服務啟動帳號的問題</title><content type='html'>&lt;p&gt;在某些情況下, 會考慮使用網域上的特定使用者帳號作為Windows服務的啟動帳號. 但若是在Windows啟動時(或是手動啟動服務時)無法連上DC, 就會出現”這個帳戶名稱不正確或不存在 ……”的錯誤, 必須要注意這一點.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-8283401654971531109?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/8283401654971531109/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=8283401654971531109' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8283401654971531109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/8283401654971531109'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/02/windows.html' title='Windows服務啟動帳號的問題'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4631542167404541281</id><published>2009-01-07T15:45:00.001+08:00</published><updated>2009-01-07T15:45:47.263+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>Virtual PC 掛點....</title><content type='html'>&lt;p&gt;昨天回家想要把Silverlight 2正式版的環境更新到Virtual PC的開發環境中，沒想到一起動Virtual PC的環境，就顯示掛點的訊息....&lt;/p&gt;  &lt;p&gt;因為這樣的關係，所以我就沒辦法更新我的網站內容了。因為最近幾天我在教Microsoft CRM 4.0的課，所以最快要等到星期五(1/9)晚上才有時間重新將網站上線了。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4631542167404541281?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4631542167404541281/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4631542167404541281' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4631542167404541281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4631542167404541281'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/01/virtual-pc.html' title='Virtual PC 掛點....'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-134241007274892829</id><published>2009-01-06T13:30:00.001+08:00</published><updated>2009-01-06T13:30:55.597+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>網站更新中</title><content type='html'>&lt;p&gt;昨天有朋友反映 &lt;a href="http://www.silverlight.idv.tw" target="_blank"&gt;www.silverlight.idv.tw&lt;/a&gt; 的網站無法連上，其實是因為在新年期間將伺服器安裝積存的更新之後，設定未修改的關係，昨天已經將網站重新上線了。但是還有一個地方沒有修改到，就是原本的Silverlight桌面程式，還沒有修改到SIlverlight 2正式版的環境，這部分可能要等我今天晚上回家再來修正一下了，先跟各位朋友說聲抱歉，可能要到明天才能繼續讓大家正常操作了。&lt;/p&gt;  &lt;p&gt;最近在研究Azure平台的開發，如果發展起來的話，以後通通放在雲端平台就輕鬆多了....&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-134241007274892829?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/134241007274892829/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=134241007274892829' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/134241007274892829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/134241007274892829'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2009/01/blog-post.html' title='網站更新中'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-3172669898401764423</id><published>2008-12-29T11:21:00.001+08:00</published><updated>2008-12-29T11:32:15.942+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式開發'/><title type='text'>.NET Framrwork Configuration Tool 何處尋 ?</title><content type='html'>&lt;p&gt;&lt;span style="font-size:100%;"&gt;剛剛慧真問了我一個問題：只安裝VS 2008 (.NET Framework 3.5)的開發環境，要從哪裡啟動.NET  Framework組態設定工具呢?&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;找了半天，在&lt;a href="http://msdn.microsoft.com/zh-tw/library/2bc0cxhc.aspx" target="_blank"&gt;MSDN的說明文件&lt;/a&gt;中，寫著下面一段話：&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;"在 .NET Framework 2.0 (含) 以後版本中，Mscorcfg.msc 是隨 &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=fe6f2099-b7b4-4f47-a244-c96d69c35dec"&gt;.NET  Framework 2.0 軟體開發套件 (SDK)&lt;/a&gt; 而安裝的"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;所以如果在只安裝VS 2008的開發環境中，要使用.NET組態設定工具的話，請另外下載並安裝.NET Framework 2.0  SDK吧!!&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-3172669898401764423?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/3172669898401764423/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=3172669898401764423' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3172669898401764423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/3172669898401764423'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/12/net-framrwork-configuration-tool.html' title='.NET Framrwork Configuration Tool 何處尋 ?'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4592730454392291124</id><published>2008-10-03T12:59:00.001+08:00</published><updated>2008-10-03T13:12:51.205+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>Silverlight 2.0線上講堂 - 22：在Silverlight 2.0應用程式中存取JavaScript</title><content type='html'>&lt;p&gt;剛剛休假回來，就有一堆的朋友發Email或是留言給我，希望我在Silverlight 2.0 線上講堂中可以提供更多的課程內容。當然，時間上允許的話，我會盡快的把計畫好的課程內容放上去，同時也謝謝這麼多的朋友一起參與線上講堂的學習。接下來的兩堂課中，我將為各位介紹如何讓Silverlight 2.0的應用程式可以和網頁中的HTML與JavaScript互動。&lt;/p&gt;  &lt;p&gt;首先，假設我們已經使用Silverlight 2.0 技術完成了下面的橫幅廣告：&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 450px; height: 150px" src="http://silverlight.services.live.com/invoke/77458/MyADSample1/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;現在希望當使用者點選廣告圖片時，可以超連結到廣告商的網站，應該要怎樣做呢?&lt;/p&gt;  &lt;p&gt;1. 首先，使用VS 2008開啟Silverlight 2.0 應用程式專案(你可以使用前面做過的例子，或是新增一個Silverlight 2.0 應用程式，裡面放上一張圖片當作廣告)。&lt;/p&gt;  &lt;p&gt;2. 在要觸發JavaScript的XAML標籤上，加入MouseLeftButtonUp事件的處理常式，並按下滑鼠右鍵，選取[巡覽至事件處理常式]。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/john.uuu/SOWmxPtC7MI/AAAAAAAADhQ/3oOrUFze9Po/s1600-h/%C3%ABg1%5B4%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="82" alt="快照1" src="http://lh3.ggpht.com/john.uuu/SOWmyZRsOMI/AAAAAAAADhU/I_s66wE6cdI/%C3%ABg1_thumb%5B2%5D.jpg?imgmax=800" width="504" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;在Silverlight 2.0 的基本類別函式庫中，定義了一個System.Windows.Browser的命名空間，裡面包含了幾個重要的物件類別：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;HtmlPage：表示目前裝載Silverlight 2.0 控制項的網頁。 &lt;/li&gt;    &lt;li&gt;HtmlWindow：表示網頁中的Window物件。 &lt;/li&gt;    &lt;li&gt;HtmlDocument：表示網頁中的Document物件。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&amp;#160; 只需要透過這些物件，我們就可以從Silverlight 2.0 的控制項中存取網頁中的Html控制項內容，或是執行JavaScript!&lt;/p&gt;  &lt;p&gt;3. 首先，在XAML程式原始檔的最前面，加上引用System.Windows.Browser命名空間的宣告：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="600" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="600"&gt;using System.Windows.Browser;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;4. 當使用者點選圖片之後，我們希望可以將網頁超連結到廣告商的網址。因此先取得網頁中的Window物件：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="600" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="600"&gt;HtmlWindow window = HtmlPage.Window;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;HtmlWindow物件提供了Navigate方法，你只需要將網址封裝成Uri物件帶進去執行即可：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="600" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="600"&gt;         &lt;p&gt;window.Navigate(new Uri(&amp;quot;&lt;a href="http://www.silverlight.idv.tw" )?=")?"&gt;http://www.silverlight.idv.tw&amp;quot;)&lt;/a&gt;,&lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;_blank&amp;quot;);&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;若是要觸發網頁中的JavaScript函式的話，也可以直接透過HtmlWindow物件所提供的Invoke方法，再依序輸入JavaScript的函式名稱及參數值即可。&lt;/p&gt;  &lt;p&gt;5. 若是要動態的搭配DOM控制網頁中的Html控制項的話，你就必須要先取得網頁中的Document物件：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="600" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="600"&gt;HtmlDocument doc = HtmlPage.Document;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;再透過GetElementById或是GetElementByTagName方法，你就可以在Silverlight 2.0 的程式中控制裝載SIlverlight 2.0 控制項的網頁內容了!! 例如下面的程式碼可以將網頁的背景色設為粉紅色，3秒之後再調整回來：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="600" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="600"&gt;         &lt;p&gt;HtmlDocument doc = HtmlPage.Document;            &lt;br /&gt;object data = doc.GetProperty(&amp;quot;bgColor&amp;quot;);             &lt;br /&gt;doc.SetProperty(&amp;quot;bgColor&amp;quot;, &amp;quot;pink&amp;quot;);             &lt;br /&gt;System.Threading.Thread.Sleep(3000);             &lt;br /&gt;doc.SetProperty(&amp;quot;bgColor&amp;quot;, data.ToString());&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;這次的課程完成的效果如下(點選圖片開啟連結)：&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 450px; height: 150px" src="http://silverlight.services.live.com/invoke/77458/MyADSample1_Final/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4592730454392291124?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4592730454392291124/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4592730454392291124' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4592730454392291124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4592730454392291124'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/10/silverlight-20-22silverlight.html' title='Silverlight 2.0線上講堂 - 22：在Silverlight 2.0應用程式中存取JavaScript'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/john.uuu/SOWmyZRsOMI/AAAAAAAADhU/I_s66wE6cdI/s72-c/%C3%ABg1_thumb%5B2%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4302206420690134587</id><published>2008-10-01T04:08:00.001+08:00</published><updated>2008-10-01T04:08:34.610+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><title type='text'>伯朗藍山咖啡，掰掰......</title><content type='html'>&lt;p&gt;&lt;font size="3"&gt;前幾天，金車公司打著&amp;quot;全系列食品衛生署檢驗合格&amp;quot;的廣告，讓我以為真的可以放心喝我喜歡的伯朗藍山咖啡了。但是當我看到他們的檢驗報告之後，我決定再也不喝了......&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;目前所謂的檢驗報告，可以分為兩種：&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3"&gt;1. &amp;quot;財團法人&amp;quot;食品工業研究所的報告(如&lt;a href="http://www.kingcar.com.tw/rep1.htm" target="_blank"&gt;金車食品1&lt;/a&gt;、&lt;a href="http://www.kingcar.com.tw/rep2.htm" target="_blank"&gt;金車食品2&lt;/a&gt;、克寧奶粉(及所有雀巢食品))：以HPLC-UV方式檢驗，最低檢驗極限2.0ppm。&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;2. SGS等其他民間公正檢驗單位報告(如&lt;a href="http://blog.udn.com/community/img/PSN_ARTICLE/josephlin2/f_2250615_1.jpg" target="_blank"&gt;西雅圖咖啡&lt;/a&gt;、摩卡咖啡)：以LC/MS/MS方式檢驗，最低檢驗極限0.05ppm。&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font size="3"&gt;或許你會覺得，都已經是ppm(mg/Kg)了，0.05ppm跟2.0ppm應該是沒有差吧 ! 舉兩個例子給你參考：&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3"&gt;1. 以我最愛喝的伯朗藍山咖啡為例，一罐是250ml，一天我可以喝3~4罐。若是以食工所的檢驗報告而言，4罐的伯朗藍山咖啡裡面最多包含2mg的三聚氰胺；而通過SGS的西雅圖咖啡1000ml最多只含0.05mg的三聚氰胺。不管人體每日容許值是多少，健康無價，&lt;font color="#ff0000"&gt;原本就不應該出現在咖啡的東西，每天加2mg給你吃，你安心嗎?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;2. 其實衛生署放寬標準，最可惡的就是圖利財團。以奶粉為例，若是你是廠商，&amp;quot;不小心&amp;quot;進了一公斤含2.5ppm三聚氰胺的毒奶粉，請問你會怎樣做?&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&amp;#160;&amp;#160; a. 若是要通過食工所的檢驗，只需要每公斤毒奶粉滲入250g以上的沒有毒奶粉稀釋，&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.5mg / 1.25 Kg = 2 ppm&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 就可以重新包裝上架上去賣。&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&amp;#160;&amp;#160; b. 若是要通過SGS檢驗，就必須每公斤毒奶粉滲入50Kg以上的沒有毒奶粉稀釋， &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2.5mg / 50 Kg = 0.05 ppm&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 才可以重新上架去賣，但是這樣成本很高。&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;而我們偉大九劉政府的衛生署，只要廠商通過食工所的檢驗(2.0ppm)，就可以在電視上大言不慚的說通過檢驗，並且重新上架販售 -- 換句話說，就是鼓勵廠商採用 a.的解決方案 -- 犧牲國人健康，圖利廠商解套。&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;因此，不要再相信 &amp;quot;衛生署檢驗合格&amp;quot; 的東西就可以吃的鬼話了 ! 要買乳製品之前，請先看清楚廠商的檢驗報告 -- &lt;font color="#ff0000"&gt;若是&amp;quot;財團法人&amp;quot;食品工業研究所檢驗通過的產品，我建議你還是不要買的好。&lt;/font&gt;所以為了我的健康，&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;伯朗藍山咖啡，掰掰了.....&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;克寧奶粉，掰掰了.....&amp;#160; &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;雀巢咖啡，掰掰了.....&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4302206420690134587?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4302206420690134587/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4302206420690134587' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4302206420690134587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4302206420690134587'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/blog-post_8336.html' title='伯朗藍山咖啡，掰掰......'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1095786881520163279</id><published>2008-09-20T18:10:00.001+08:00</published><updated>2008-09-20T18:11:54.262+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>Silverlight 2.0 線上講堂通知(09/20)</title><content type='html'>&lt;p&gt;原本計畫要在這一個月多寫一些內容的，但因為我在恆逸資訊有很多課，加上異位性皮膚炎發作要多休息，所以最近就沒有很多時間可以維護線上講堂的內容。謝謝很多朋友透過線上以及Email來關心線上講堂的進度，你們的問題我也都會盡快回覆給各位。&lt;/p&gt;  &lt;p&gt;在這裡先通知各位線上講堂的同學，下個星期(9/21~~9/26)我休假去了，所以無法在線上回答各位的問題，同時線上講堂也休息一星期。如果你有任何的問題，仍然還是可以透過Email跟我聯絡(&lt;a href="mailto:john_chang@uuu.com.tw"&gt;john_chang@uuu.com.tw&lt;/a&gt;)，我會在回國之後盡快回覆的，謝謝。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1095786881520163279?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1095786881520163279/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1095786881520163279' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1095786881520163279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1095786881520163279'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/silverlight-20-0920.html' title='Silverlight 2.0 線上講堂通知(09/20)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-4523409409307326138</id><published>2008-09-19T21:43:00.001+08:00</published><updated>2008-09-19T21:43:58.015+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='閒聊'/><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><title type='text'>Microsoft Online Services</title><content type='html'>&lt;p&gt;你對於建置系統這檔子事累了嗎 ?&lt;/p&gt;  &lt;p&gt;為了實現軟體即服務(SaaS)，微軟現在提供了許多的線上軟體服務 -- &lt;a href="http://www.microsoft.com/online/learn.mspx" target="_blank"&gt;Microsoft Online Services&lt;/a&gt;，讓中小企業的 IT 人員，可以花最少的時間與建置成本，就可以直接線上使用微軟的產品，建置企業所需要的解決方案。這些線上產品包括了：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Office Live Meeting&lt;/li&gt;    &lt;li&gt;Exchange Hosted Service&lt;/li&gt;    &lt;li&gt;Exchange Online&lt;/li&gt;    &lt;li&gt;Sharepoint Online&lt;/li&gt;    &lt;li&gt;Office Comminications Online&lt;/li&gt;    &lt;li&gt;Dynamics CRM Online&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;u&gt;透過這些線上的產品，將來中小企業的 IT 人員就不需要在公司中安裝跟維護這一些產品，相對的也可以節省更多的建置成本 !&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;除此之外，SQL Server目前也提供了免費線上存取的資料服務 -- &lt;a href="http://www.microsoft.com/sql/dataservices/default.mspx" target="_blank"&gt;SQL Server Data Service (SSDS)&lt;/a&gt;，讓MIS人員可以將程式中的資料，直接存放在微軟所提供的線上資料庫當中。換句話說，&lt;font color="#ff0000"&gt;對於中小企業而言，將來只需要購買SDSS的服務，就不需要再去採買、維護SQL Server資料庫所需要的伺服器 ! &lt;/font&gt;而目前SDSS提供了&lt;font color="#ff0000"&gt;&lt;strong&gt;免費&lt;/strong&gt;&lt;/font&gt;註冊使用的Beta 版，想要使用微軟雲端運算架構建置系統的開發人員，不妨去試用看看!!&lt;/p&gt;  &lt;p&gt;而在不久的將來，微軟的產品BizTalk Server、Windows 作業系統等，也都會可以透過這種方式使用；對於系統操作、管理、開發方式等，微軟的雲端運算的SaaS架構都會帶來重大的改變 !&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-4523409409307326138?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/4523409409307326138/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=4523409409307326138' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4523409409307326138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/4523409409307326138'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/microsoft-online-services.html' title='Microsoft Online Services'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1819145944964519115</id><published>2008-09-19T18:34:00.001+08:00</published><updated>2008-09-19T18:34:34.220+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>問題與回應(09/19)</title><content type='html'>&lt;p&gt;1.&lt;/p&gt;  &lt;p&gt;不好意思~我是一個想自學Silverlight的學生,我想請問一下八月那篇的講堂14的最後小練習:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="619" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="617"&gt;3. 接下來，將 MyCarouselWeb測試專案當中的HTML測試網頁開啟。         &lt;br /&gt;開啟後將網頁中的&amp;lt;object&amp;gt; ... ...&amp;lt;/object&amp;gt;標籤範圍中的內容，          &lt;br /&gt;複製到TimeSampleWeb網站的測試網頁的HTML內容中。&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;問題是:我把&amp;lt;object&amp;gt;標籤的內容全部貼到TimeSampleWeb html的&amp;lt;object&amp;gt;裡面&lt;/p&gt;  &lt;p&gt;不過跑出來還是只有TimeSample的效果而已   &lt;br /&gt;我也把MyCarousel的XAP檔加到ClientBin裡面了    &lt;br /&gt;是否貼的位置不對呢?&lt;/p&gt;  &lt;p&gt;這是我MyCarousel的object標籤內容&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="626" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="624"&gt;         &lt;p&gt;&amp;lt;object data=&amp;quot;data:application/x-silverlight,&amp;quot; type=&amp;quot;application/x-silverlight-2-b2&amp;quot; width=&amp;quot;100%&amp;quot; height=&amp;quot;100%&amp;quot;&amp;gt; &lt;/p&gt;          &lt;p&gt;&amp;lt;param name=&amp;quot;source&amp;quot; value=&amp;quot;ClientBin/MyCarousel.xap&amp;quot;/&amp;gt;           &lt;br /&gt;&amp;lt;param name=&amp;quot;onerror&amp;quot; value=&amp;quot;onSilverlightError&amp;quot; /&amp;gt;            &lt;br /&gt;&amp;lt;param name=&amp;quot;background&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;            &lt;br /&gt;&amp;lt;a href=&amp;quot;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=115261"&gt;http://go.microsoft.com/fwlink/?LinkID=115261&lt;/a&gt;&amp;quot; style=&amp;quot;text-decoration: none;&amp;quot;&amp;gt;            &lt;br /&gt;&amp;lt;img src=&amp;quot;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=108181"&gt;http://go.microsoft.com/fwlink/?LinkId=108181&lt;/a&gt;&amp;quot; alt=&amp;quot;Get Microsoft Silverlight&amp;quot; style=&amp;quot;border-style: none&amp;quot;/&amp;gt;            &lt;br /&gt;&amp;lt;/a&amp;gt;            &lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;這是我TimeSample的object的標籤內容&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="630" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="628"&gt;         &lt;p&gt;&amp;lt;object data=&amp;quot;data:application/x-silverlight,&amp;quot; type=&amp;quot;application/x-silverlight-2-b2&amp;quot; width=&amp;quot;100%&amp;quot; height=&amp;quot;100%&amp;quot;&amp;gt; &lt;/p&gt;          &lt;p&gt;&amp;lt;param name=&amp;quot;source&amp;quot; value=&amp;quot;ClientBin/TimerSample.xap&amp;quot;/&amp;gt;           &lt;br /&gt;&amp;lt;param name=&amp;quot;onerror&amp;quot; value=&amp;quot;onSilverlightError&amp;quot; /&amp;gt;            &lt;br /&gt;&amp;lt;param name=&amp;quot;background&amp;quot; value=&amp;quot;white&amp;quot; /&amp;gt;            &lt;br /&gt;&amp;lt;a href=&amp;quot;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=115261"&gt;http://go.microsoft.com/fwlink/?LinkID=115261&lt;/a&gt;&amp;quot; style=&amp;quot;text-decoration: none;&amp;quot;&amp;gt;            &lt;br /&gt;&amp;lt;img src=&amp;quot;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=108181"&gt;http://go.microsoft.com/fwlink/?LinkId=108181&lt;/a&gt;&amp;quot; alt=&amp;quot;Get Microsoft Silverlight&amp;quot; style=&amp;quot;border-style: none&amp;quot;/&amp;gt;            &lt;br /&gt;&amp;lt;/a&amp;gt;            &lt;br /&gt;&amp;lt;/object&amp;gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;後來我發現這兩個標籤檔的內容幾乎一樣~所以我把&amp;lt;param name=&amp;quot;source&amp;quot; value=&amp;quot;ClientBin/TimerSample.xap&amp;quot;/&amp;gt;的TimerSample.xap改成MyCarousel.xap   &lt;br /&gt;沒想到還是跑出TimerSample的效果= =&lt;/p&gt;  &lt;p&gt;==&amp;gt;&lt;/p&gt;  &lt;p&gt;這問題發生的主要原因，就是因為在VS 2008專案預設建立的測試頁中，會將Silverlight的控制項的width與height屬性預設都設為100%，因此你只需要將網頁中的兩個&amp;lt;object&amp;gt;標籤的width跟height屬性調整成Silverlight表單的大小即可。&lt;/p&gt;  &lt;p&gt;順便記住下面的這一個小技巧：&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;將Silverlight 2.0 表單嵌入網頁中使用時，記得根據網頁顯示需要，調整Silverlight控制項的width與height屬性 !&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1819145944964519115?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1819145944964519115/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1819145944964519115' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1819145944964519115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1819145944964519115'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/0919.html' title='問題與回應(09/19)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1945431821534739885</id><published>2008-09-11T16:10:00.001+08:00</published><updated>2008-09-11T16:36:59.029+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>瀏覽器之戰? 你錯了....</title><content type='html'>&lt;p&gt;&lt;font size="3"&gt;9/3 號，Google發表了Chrome瀏覽器測試版以來，很多人以為以後將會是Google瀏覽器對抗IE的時代，但是事實是這樣的嗎?&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;如果你有安裝Chrome瀏覽器，你會發現到主要的功能其實跟Firefox差不多(目前為止)。根據Google的說法，未來Chrome瀏覽器將採開放式的架構，針對用戶端提供更穩定、快速的瀏覽效果。但我覺得更重要的是，在Google瀏覽器當中，提供了一個新的JavaScript Engine-- V8。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;關於V8，你可以參考&lt;/font&gt;&lt;a href="http://code.google.com/p/v8/" target="_blank"&gt;&lt;font size="3"&gt;Google V8 JavaScript Engine&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;的說明。簡單的說，這一個新的JavaScript Engine最主要的特點，包括：&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3"&gt;1. 更快，你可以參考&lt;/font&gt;&lt;a href="http://code.google.com/apis/v8/benchmarks.html" target="_blank"&gt;&lt;font size="3"&gt;Benchmarks的資訊&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;。&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;2. &lt;u&gt;可將JavaScript編譯成機器碼執行&lt;/u&gt;，&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;quot;There are no intermediate byte codes, no interpreter.&amp;quot;，&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;&amp;quot;This greatly improves the speed at which most JavaScript code can be executed.&amp;quot;。&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;3. &lt;u&gt;更有效率的資源回收機制&lt;/u&gt;(Garbage Collection)。&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font size="3"&gt;注意到重點了嗎? 很多人都將Google推出瀏覽器的重點擺在跟IE比較功能與穩定性，但這有啥好比較 ? 目前IE 8還沒有正式推出，唯一有新功能的瀏覽器是Firefox 3.0，要比也是先跟Firefox比，IE 有啥可以比的? &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Google瀏覽器推出的真正的意義，應該是Google宣示要開始在用戶端程式環境的部分，正式開始跟微軟一別苗頭了!&lt;/strong&gt;&lt;/font&gt; 長久以來，Google致力於開發與提供網路服務平台；而用戶端的環境，則是一直由微軟所掌控(參考Windows作業系統的市占率)。但是隨著網際網路開發技術的發展，&amp;quot;作業系統&amp;quot; 的作用，慢慢的簡化成為開機用的程式而已。換句話說，&lt;u&gt;&lt;font color="#ff0000"&gt;在Browser + Web Service(SaaS)的架構發展完成之後，用戶端程式開發的重點，就變成要使用哪一種 &amp;quot;&lt;strong&gt;技術&lt;/strong&gt;&amp;quot; 來建立使用者操作介面與用戶端的功能&lt;/font&gt;&lt;/u&gt;。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;若是你使用過Chrome瀏覽器瀏覽&lt;/font&gt;&lt;a href="http://www.silverlight.idv.tw"&gt;&lt;font size="3"&gt;www.silverlight.idv.tw&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;，你會發現SIlverlight 2.0的應用程式沒有辦法正常的執行。換句話說，雖然Chrome是使用公版(開放原始碼計畫&lt;/font&gt;&lt;a href="http://webkit.org/"&gt;&lt;font size="3"&gt;Webkit&lt;/font&gt;&lt;/a&gt;&lt;font size="3"&gt;)下去發展的，但是實作的部分卻不一樣。所以未來微軟若是要將Silverlight 2.0 術推廣到Goole瀏覽器上面的話，勢必要再推出一個新的Silverlight安裝套件的版本。然而，&lt;u&gt;微軟會為每一種瀏覽器，都提供Silverlight的安裝套件嗎?&lt;/u&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3"&gt;這問題我就暫時不回答了，但是從V8的JavaScript引擎的架構來說，從編譯成機器碼到提供資源回收器這些特性來說，都和Silverlight 2.0執行環境目標差不多 -- 換句話說，Google推出瀏覽器，真正的意義，應該是要在用戶端環境透過JacaScript技術和Silverlight宣戰! 兩者之間目前的差異：&lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font size="3"&gt;1. Silverlight 2.0 提供了比較方便的開發、設計環境。&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font size="3"&gt;2. JavaScript提供了跨不同瀏覽器平台，用戶端不需要安裝額外套件就可以執行的能力。&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font size="3"&gt;若是從本質上看來，就類似從前的JavaScript技術與Activex Control技術的對抗 -- 只是這次JavaScript技術有Google加持，Silverlight有.NET做後盾，那一種技術會成為主流，我想未來的半年，會是一個關鍵。不過微軟這次兩邊都押寶(ASP.NET AJAX、Silverlight 2.0)，因此了不起最多輸一半，也不至於會在用戶端的開發技術中出局就是了.....&lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1945431821534739885?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1945431821534739885/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1945431821534739885' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1945431821534739885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1945431821534739885'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/blog-post_11.html' title='瀏覽器之戰? 你錯了....'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1271315547967588603</id><published>2008-09-09T18:16:00.001+08:00</published><updated>2008-09-09T18:26:46.307+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>問題與回應(09/09)</title><content type='html'>&lt;p&gt;Brian來信問了一些問題，也有人問過類似的問題，所以統一回應一下：&lt;/p&gt;  &lt;p&gt;1.&lt;/p&gt;  &lt;p&gt;當我初始化一個控制項後,我可以對控制項作move嗎? (所有的控制項都這樣嗎?)&lt;/p&gt;  &lt;p&gt;我舉一個例子, 假如我有個textbox, 當我page load 時 已經出現在page中,&lt;/p&gt;  &lt;p&gt;如果我想讓滑鼠拖曳著textbox可以在page上動,請問做得到嗎,我有自己試過,但是不像image, rectangle...那麼好處理&lt;/p&gt;  &lt;p&gt;==&amp;gt;&lt;/p&gt;  &lt;p&gt;要開發拖曳的功能其實一點都不難，只要透過滑鼠事件處理一下就可以了：&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 400px; height: 200px" src="http://silverlight.services.live.com/invoke/77458/Drag%20Drop%20Sample/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;下次線上講堂再插入一堂課來教各位好了，不過程式碼很簡單，你可以參考SDK自己先開發看看。我在My Windows Desktop專案中把這功能做到元件當中，你可以下載這一個組件：&lt;/p&gt;  &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-155f8cb309a06348.skydrive.live.com/embedrowdetail.aspx/%e7%af%84%e4%be%8b/Silverlight%202.0/MyExtenders.dll" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt; 然後加入參考到Silverlight專案當中，在Page的建構子中將需要支援拖曳的控制項加入Canvas控制項，然後將控制項名稱傳入RegisterDragDrop方法中：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="542" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="540"&gt;         &lt;p&gt;public Page()           &lt;br /&gt;{            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;MyExtenders.MyWindows.RegisterDragDrop&lt;/font&gt;(txtName);            &lt;br /&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;這樣就可以了。&lt;/p&gt;  &lt;p&gt;(不過這一個組件還在開發中，因此暫時提供給各位的是還沒有final的版本)&lt;/p&gt;  &lt;p&gt;2.&lt;/p&gt;  &lt;p&gt;有沒有教學的網站或是sample 是在教如何customize 控制項的 另外自訂的控制項如何讓silverlight 參考到&lt;/p&gt;  &lt;p&gt;(是當成silverlight的resource嗎)&lt;/p&gt;  &lt;p&gt;==&amp;gt;&lt;/p&gt;  &lt;p&gt;自訂控制項的部分，線上講堂後面會安排課程介紹；另外，你也可以&lt;a href="http://msdn.microsoft.com/en-us/library/bb404700(VS.95).aspx" target="_blank"&gt;參考Silverlight 2.0 SDK&lt;/a&gt;，裡面也有介紹作法。。不過在你要自訂控制項之前，可以先思考一下：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;我要擴充的是功能，還是操作介面 ?&amp;quot; &lt;/p&gt;    &lt;p&gt;&amp;quot;真的有需要重複使用嗎 ?&amp;quot;&lt;/p&gt;    &lt;p&gt;&amp;quot;自訂控制項對效能有多大的影響 ?&amp;quot;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;如果你只是要使用Silverlight 2.0 開發一些有動態效果的Banner，我建議你一般不需要自訂控制項--除非你是要發展Rich Client的應用程式或是要賣Silverlight 2.0擴充元件。&lt;/p&gt;  &lt;p&gt;3.&lt;/p&gt;  &lt;p&gt;上禮拜麻煩你做一個textbox sample, 當我滑鼠沒按到textbox 時 textbox是沒有邊框的&lt;/p&gt;  &lt;p&gt;當我按到textbox時 textbox 邊框是虛線 ,如果來得及的話,可以教一下我 我還是沒辦法從blend2 to silverlight project做出來&lt;/p&gt;  &lt;p&gt;==&amp;gt;&lt;/p&gt;  &lt;p&gt;請參考&lt;a href="http://john-publish.blogspot.com/2008/09/silverlight-2-21.html"&gt;Silverlight 2 線上講堂 -21：淺談控制項外觀效果&lt;/a&gt;，謝謝。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1271315547967588603?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1271315547967588603/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1271315547967588603' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1271315547967588603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1271315547967588603'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/0909.html' title='問題與回應(09/09)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-2066657481519375977</id><published>2008-09-09T00:21:00.001+08:00</published><updated>2008-09-09T00:58:15.404+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>Silverlight 2 線上講堂 -21：淺談控制項外觀效果</title><content type='html'>&lt;p&gt;上個星期有位Brian朋友在線上問我，如何在使用者滑鼠移到TextBox控制項的時候，在TextBox控制項的外面顯示虛線的框線，提示使用者輸入資料。Brian說，想用繼承的方式建立一個自訂的TextBox控制項，然後再去客製化外觀。我一聽，天啊! 千萬不要有這樣的想法!! 趕緊先加了一堂課來為各位說明一下外觀的控制技巧。&lt;/p&gt;  &lt;p&gt;在建立Silverlight 2.0應用程式外觀的時候，各位千萬要記住一句話，那就是：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;quot;外觀要用設計師(Designer)的想法來思考!!&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;不要動不動就想到元件，想到繼承，然後把簡單的事情給複雜化。&lt;/u&gt;如果是物件導向跟繼承、override就可以解決的事，交給VS 2008就好了，要Expression Blend做啥? &lt;/p&gt;  &lt;p&gt;要做出Brian想要的效果，其實很簡單，讓我們來看看技巧在哪：&lt;/p&gt;  &lt;p&gt;1. 首先，我們要先用一些設計工具&amp;quot;畫&amp;quot;出虛線的外框，開啟小畫家。&lt;/p&gt;  &lt;p&gt;2. 你沒聽錯，就是Windows內建的--&amp;quot;小畫家&amp;quot;。&lt;/p&gt;  &lt;p&gt;3. 將畫布調整成適當的大小(大約比TextBox控制項大一點)，然後選取填入色彩按鈕( &lt;a href="http://lh6.ggpht.com/john.uuu/SMVQigviybI/AAAAAAAACbk/0gOrQxkxiu4/s1600-h/%C3%ABg2%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="30" alt="快照2" src="http://lh6.ggpht.com/john.uuu/SMVQj_A5x7I/AAAAAAAACbo/wGUt3XSgZ0w/%C3%ABg2_thumb.jpg?imgmax=800" width="30" border="0" /&gt;&lt;/a&gt; )，再從色盤中選取黑色，再點選畫布，將畫布填滿黑色：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/john.uuu/SMVQlB3p7UI/AAAAAAAACbs/pN6TRm1pcgo/s1600-h/%C3%ABg1%5B12%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="252" alt="快照1" src="http://lh5.ggpht.com/john.uuu/SMVQnTmGt7I/AAAAAAAACbw/q7ZirSd_57Y/%C3%ABg1_thumb%5B8%5D.jpg?imgmax=800" width="455" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;4. 選取圓角矩形按鈕( &lt;a href="http://lh6.ggpht.com/john.uuu/SMVQpULDN0I/AAAAAAAACb0/Y5FU0lkz8o0/s1600-h/%C3%ABg3%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="30" alt="快照3" src="http://lh6.ggpht.com/john.uuu/SMVQqge6ZAI/AAAAAAAACb4/6xiugEdqgp0/%C3%ABg3_thumb.jpg?imgmax=800" width="30" border="0" /&gt;&lt;/a&gt; )，在下方選取粗一點的框線，然後從色盤中選取你喜歡的顏色，最後在畫布中建立矩形區域：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/john.uuu/SMVQr3BqrWI/AAAAAAAACb8/Rqd43JzT7oI/s1600-h/%C3%ABg4%5B7%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="398" alt="快照4" src="http://lh6.ggpht.com/john.uuu/SMVQtMsUiRI/AAAAAAAACcA/LYRvMt-lfmU/%C3%ABg4_thumb%5B5%5D.jpg?imgmax=800" width="425" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;5. 接下來選取粉刷工具( &lt;a href="http://lh5.ggpht.com/john.uuu/SMVQucWaBYI/AAAAAAAACcE/w_ye6m3ISvU/s1600-h/%C3%ABg6%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="30" alt="快照6" src="http://lh5.ggpht.com/john.uuu/SMVQvFlrblI/AAAAAAAACcI/dOkUYbwagPc/%C3%ABg6_thumb.jpg?imgmax=800" width="30" border="0" /&gt;&lt;/a&gt; )，然後選取矩形的筆觸，然後從色盤中選取黑色：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/john.uuu/SMVQwTF2pwI/AAAAAAAACcM/d8npfEoJdLM/s1600-h/%C3%ABg5%5B6%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="329" alt="快照5" src="http://lh5.ggpht.com/john.uuu/SMVQxnrVh_I/AAAAAAAACcQ/aP21fsVFwt4/%C3%ABg5_thumb%5B4%5D.jpg?imgmax=800" width="424" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;6. 接著，在畫布上的矩形上，每隔一段間隔圖上黑色，虛線的框線就完成了：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/john.uuu/SMVQy_9IxjI/AAAAAAAACcU/lP8DoH1yZIk/s1600-h/%C3%ABg7%5B6%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="252" alt="快照7" src="http://lh3.ggpht.com/john.uuu/SMVQ0E5Z1GI/AAAAAAAACcY/Z-niGvq0_PA/%C3%ABg7_thumb%5B4%5D.jpg?imgmax=800" width="425" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;7. 將這一個圖檔存成View.jpg。然後使用VS 2008新增一個Silverlight應用程式專案，取名為MyTextBox。&lt;/p&gt;  &lt;p&gt;8. 使用Expression Blend 2.5設計工具開啟MyTextBox專案，將&amp;lt;UserControl&amp;gt;標籤中的子元素(預設是Grid)換成Canvas，並且將大小設為400x100，底色為黑色。&lt;/p&gt;  &lt;p&gt;9. 在[Project]視窗中選取MyTextBox專案，按下滑鼠右鍵選取[Add Existing Item...]，將View.jpg加入專案當中。&lt;/p&gt;  &lt;p&gt;10. 將View.jpg從[Project]視窗中拖曳到畫布上，此時Blend設計工具會自動建立Image控制項。調整Image控制項到適當大小，然後到[Properties]視窗中設定Image控制項的Name屬性值為imgBorder：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/john.uuu/SMVQ1dKYC0I/AAAAAAAACcc/5EFbzBsWmlc/s1600-h/%C3%ABg8%5B6%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="快照8" src="http://lh3.ggpht.com/john.uuu/SMVQ2T483nI/AAAAAAAACcg/2DdSz07WSkk/%C3%ABg8_thumb%5B4%5D.jpg?imgmax=800" width="422" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;11. 將TextBox控制項加入表單中，放置在Image控制項的框線範圍中，調整成適當大小(可以透過View--&amp;gt;Zoom in幫忙)。然後到[Properties]視窗中設定Image控制項的Name屬性值為txtName，並清除Content屬性的內容。完成的結果如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/john.uuu/SMVQ3WN8gPI/AAAAAAAACck/Nev8bKXQV5g/s1600-h/%C3%ABg10%5B6%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="119" alt="快照10" src="http://lh3.ggpht.com/john.uuu/SMVQ4aJ0y8I/AAAAAAAACco/urC6g78yGfc/%C3%ABg10_thumb%5B4%5D.jpg?imgmax=800" width="416" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;12. 接下來，選取imgBorder控制項，在[Properties]視窗中設定[Appearance]的Visibility屬性值為Collapsed，隱藏imgBorder控制項。&lt;/p&gt;  &lt;p&gt;13. 完成之後，選取[File]--&amp;gt;[Save All]，存檔並關閉Expression Blend設計工具。&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160; ----------------&amp;#160; 操作介面設計完成&amp;#160; -------------------&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;14. 使用VS 2008開發工具開啟MyTextBox專案中的Page.xaml，在TextBox控制項元素中設定MouseEnter事件對應的處理常式，然後按下滑鼠右鍵選取[巡覽置事件處理常式]：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/john.uuu/SMVQ5j4BJII/AAAAAAAACcs/HpiuWBId7Iw/s1600-h/%C3%ABg11%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="116" alt="快照11" src="http://lh3.ggpht.com/john.uuu/SMVQ6ybmcZI/AAAAAAAACcw/N_ISb-h6yPg/%C3%ABg11_thumb%5B1%5D.jpg?imgmax=800" width="435" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/john.uuu/SMVQ8RgwAoI/AAAAAAAACc0/HKWdCdoACwc/s1600-h/%C3%ABg12%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="102" alt="快照12" src="http://lh4.ggpht.com/john.uuu/SMVQ9QS1SZI/AAAAAAAACc4/cad0iJyGWLk/%C3%ABg12_thumb%5B1%5D.jpg?imgmax=800" width="418" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;15. 在txtName_MouseEnter事件處理常式中，加入顯示imgBorder控制項的程式碼如下：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="599" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="597"&gt;         &lt;p&gt;private void txtName_MouseEnter(object sender, MouseEventArgs e)            &lt;br /&gt;{             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;imgBorder.Visibility = Visibility.Visible;              &lt;br /&gt;&lt;/font&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;16. 重複步驟14，建立MouseLeave事件的事件處理常式txtName_MouseLeave。在txtName_MouseLeave事件處理常式中，加入隱藏imgBorder控制項的程式碼如下：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="605" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="603"&gt;         &lt;p&gt;private void txtName_MouseLeave(object sender, MouseEventArgs e)            &lt;br /&gt;{             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;imgBorder.Visibility = Visibility.Collapsed;              &lt;br /&gt;&lt;/font&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;17. 完成之後建置專案，然後執行測試網頁。完成的效果如下：&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 400px; height: 100px" src="http://silverlight.services.live.com/invoke/77458/TextBox%20Sample%2001/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;稍微修改一下，又可以有不一樣的效果。例如，讓使用者按下框線矩形區域，才可以輸入資料：&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 400px; height: 100px" src="http://silverlight.services.live.com/invoke/77458/TextBox%20Sample%2002/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;很簡單，不是嗎 ? 不要再去想啥控制項繼承、自訂控制項之類的動作，記住下面的這句話：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;&amp;quot;外觀要用設計師(Designer)的想法來思考!!&amp;quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;你就不會被一些錯誤的觀念，誤導到錯誤的方向，走進死胡同!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-2066657481519375977?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/2066657481519375977/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=2066657481519375977' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2066657481519375977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/2066657481519375977'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/silverlight-2-21.html' title='Silverlight 2 線上講堂 -21：淺談控制項外觀效果'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/john.uuu/SMVQj_A5x7I/AAAAAAAACbo/wGUt3XSgZ0w/s72-c/%C3%ABg2_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-1841738148255877357</id><published>2008-09-08T02:41:00.001+08:00</published><updated>2008-09-08T02:41:45.905+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='課程回應'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>問題與回應(09/07)</title><content type='html'>&lt;p&gt;1. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;請問我在XXX講師網站中，看到有介紹可以開發支援輸入密碼的TextBox控制項，但是我按照步驟做出來卻有很多的問題。在您的範例網站首頁中，我看到老師有開發登入表單的功能，請問一下老師是不是有更好的解決方式?&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;==&amp;gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;其實在My Windows Desktop專案中，已經做好登入表單的功能--當然也包含可以輸入密碼的TextBox控制項。要製作可以輸入密碼的TextBox控制項程式碼並不難，但是有一些需要注意的&amp;quot;眉角&amp;quot;。如果你是照著他所提供的範例做不出來的話，可能要請你去問XXX講師，看看他是操作步驟寫錯，還是copy了別人網站不完整的範例。&lt;/p&gt;    &lt;p&gt;陸陸續續也有很多朋友問我關於控制項客製化的問題，先給大家一個觀念：Silverlight應用程式中，UI的問題不是靠物件導向解決的，千萬不要把問題複雜化。&lt;/p&gt;    &lt;p&gt;我的可以輸入密碼的TextBox控制項中還有一些小bug，不過大致上完成的差不多了，有興趣可以先試一下這一個例子：&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;iframe style="width: 400px; height: 250px" src="http://silverlight.services.live.com/invoke/77458/UI-Password/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;至於程式碼的部分，會再安排在後面的講堂課程中介紹。&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-1841738148255877357?l=john-publish.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://john-publish.blogspot.com/feeds/1841738148255877357/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8136480488211782084&amp;postID=1841738148255877357' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1841738148255877357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8136480488211782084/posts/default/1841738148255877357'/><link rel='alternate' type='text/html' href='http://john-publish.blogspot.com/2008/09/0907.html' title='問題與回應(09/07)'/><author><name>John</name><uri>http://www.blogger.com/profile/10627222746339259093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh4.google.com/john.uuu/RzUWU1eLxBI/AAAAAAAAAKE/PrAGHpkKIt4/s144/ME.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8136480488211782084.post-963281837926676819</id><published>2008-09-05T18:00:00.001+08:00</published><updated>2008-09-05T18:35:49.951+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='技術文章'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 2 講堂'/><title type='text'>Silverlight 2 線上講堂 -20：使用OpenFileDialog開啟用戶端檔案</title><content type='html'>&lt;p&gt;在Silverlight 2.0的執行環境當中，除了提供使用者操作介面的動態效果之外，也提供了部分存取用戶端資源的方式，像是可以透過OpenFileDialog開啟用戶端的檔案，以及使用IsolatedStorage暫存區等等。&lt;/p&gt;  &lt;p&gt;然而在使用上必須要注意的觀念是：雖然Silverlight 2.0相對於DHTML技術而言，可以算是Rich Client的技術，但是&lt;strong&gt;&lt;font color="#ff0000"&gt;仍然是執行在瀏覽器中的程式，因此無論是在安全性或是存取用戶端資源的動作來說，都受到瀏覽器框架設定的限制&lt;/font&gt;&lt;/strong&gt;。若是你要開發的是可以完整存取用戶端資源的真正Rich Client的程式的話，請使用WPF或是傳統的Windows Form的技術。&lt;/p&gt;  &lt;p&gt;接下來的線上講堂，我們將透過前面學過的分散式架構開發技巧，開發可以將用戶端檔案上傳到伺服器端的程式。首先我們先學習使用OpenFileDialog物件，顯示&amp;quot;開啟舊檔&amp;quot;對話方塊的技巧。&lt;/p&gt;  &lt;p&gt;1. 使用VS 2008新增一個Silverlight應用程式專案，取名為OpenFileSample。&lt;/p&gt;  &lt;p&gt;2. 使用Expression Blend 2.5設計工具開啟OpenFileSample專案，將&amp;lt;UserControl&amp;gt;標籤中的子元素(預設是Grid)換成Canvas，並且將大小設為800x600，底色為黑色。設定完成的XAML組態如下(紅色為調整過的設定)：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="649" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="647"&gt;         &lt;p&gt;&amp;lt;UserControl x:Class=&amp;quot;OpenFileSample.Page&amp;quot;            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlns=&amp;quot;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ?="?"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/a&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; xmlns:x=&amp;quot;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml" ?="?"&gt;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/a&gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Width=&amp;quot;&lt;font color="#ff0000"&gt;800&lt;/font&gt;&amp;quot; Height=&amp;quot;&lt;font color="#ff0000"&gt;600&lt;/font&gt;&amp;quot;&amp;gt;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;Canvas&lt;/font&gt; x:Name=&amp;quot;LayoutRoot&amp;quot; Background=&amp;quot;&lt;font color="#ff0000"&gt;Black&lt;/font&gt;&amp;quot;&amp;gt; &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;font color="#ff0000"&gt;Canvas&lt;/font&gt;&amp;gt;             &lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;3. 從Expression Blend 2.5設計工具列中，加入一個按鈕到Canvas控制項中。然後在[Properties]-[Layout]視窗中，將Width屬性值設為400，Height屬性值設為40，Left屬性值設為200，Top屬性值設為40：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/john.uuu/SMEC8fdpvjI/AAAAAAAACak/h20QyWa1ruI/s1600-h/%C3%ABg1%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="119" alt="快照1" src="http://lh6.ggpht.com/john.uuu/SMEC9RUPvgI/AAAAAAAACao/wQarOo2lCr0/%C3%ABg1_thumb%5B1%5D.jpg?imgmax=800" width="264" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;4. 接著，在[Properties]--[Common Properties]視窗中，將Content屬性值設為&amp;quot;開啟文字檔/圖檔&amp;quot;；然後在[Text]視窗中，將字型大小設為16：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/john.uuu/SMEC-dnlPUI/AAAAAAAACas/SNd_S-j0C5Q/s1600-h/%C3%ABg2%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="212" alt="快照2" src="http://lh3.ggpht.com/john.uuu/SMEC_bD0q2I/AAAAAAAACaw/Ov0R2Zz9ZBw/%C3%ABg2_thumb%5B1%5D.jpg?imgmax=800" width="280" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;5. 將來我們希望可以透過這一個Silverlight表單顯示文字檔或是圖檔的內容，你有兩種選擇：&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; a. 先將顯示資料的控制項置入表單當中，再透過Visibility屬性控制顯示的時機。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; b. 當程式執行時再動態的建立控制項，加入Canvas當中顯示。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; 若是你有搭配使用者操作介面設計師一起工作，或是沒有其他的動態改變顯示介面需求的話，建議你選擇 a.，因為比較容易控制項顯示的操作介面，同時須要維護的程式碼比較少；若是你有需要像&lt;a href="http://www.silverlight.idv.tw" target="_blank"&gt;Silverlight 2.0 - My Windows Desktop&lt;/a&gt;一樣有很多需要結合程式的動態頁面效果的話，那我才建議你採用 b.的方式。在這一個練習當中我們先教大家 a.的做法，後面進階一點的課程再來教大家。&lt;/p&gt;  &lt;p&gt;6. 從工具箱中選取TextBox控制項，然後置放在Canvas控制項上：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/john.uuu/SMEDAQrFJ7I/AAAAAAAACa0/HFd1qYdoCj4/s1600-h/%C3%ABg3%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="111" alt="快照3" src="http://lh6.ggpht.com/john.uuu/SMEDBGVYNbI/AAAAAAAACa4/90Ct76wl0rI/%C3%ABg3_thumb.jpg?imgmax=800" width="154" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; 在[Properties]視窗中將TextBox控制項名稱設為txtData；然後在[Properties]--[Layout]視窗中，將Width屬性值設為600，Height屬性值設為420，Left屬性值設為100，Top屬性值設為130。最後在[Properties]--[Common Properties]視窗中，清除Text屬性值。&lt;/p&gt;  &lt;p&gt;7. 完成之後，在[Objects and Timeline]視窗中選取Hide/Show按鈕，在設計工具中隱藏TextBox控制項，以免影像到後面的動作：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/john.uuu/SMEDCAGIJ_I/AAAAAAAACa8/Farwk0gNRpY/s1600-h/%C3%ABg4%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="209" alt="快照4" src="http://lh5.ggpht.com/john.uuu/SMEDDSpqdQI/AAAAAAAACbA/Vxw2XWXkH3I/%C3%ABg4_thumb%5B1%5D.jpg?imgmax=800" width="288" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;8. 選取工具列中的Assert Library按鈕，開啟[Assert Library]視窗：&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh6.ggpht.com/john.uuu/SMEDEKpY0KI/AAAAAAAACbE/zr6-Bpq_6qA/s1600-h/%C3%ABg5%5B5%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="103" alt="快照5" src="http://lh5.ggpht.com/john.uuu/SMEDFDCfXVI/AAAAAAAACbI/LDt7ATfkgis/%C3%ABg5_thumb%5B1%5D.jpg?imgmax=800" width="193" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;選取[Assert Library]視窗右上角的Show All核選方塊，然後選取Image控制項，加入Silverlight表單的Canvas控制項中：&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/john.uuu/SMEDGaTdgrI/AAAAAAAACbM/BXguS1iOUag/s1600-h/%C3%ABg6%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="364" alt="快照6" src="http://lh6.ggpht.com/john.uuu/SMEDHgS2UoI/AAAAAAAACbQ/ks_83OEuzS8/%C3%ABg6_thumb%5B1%5D.jpg?imgmax=800" width="619" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;9. 在[Properties]視窗中將Image控制項名稱設為imgData；然後在[Properties]--[Layout]視窗中，將Width屬性值設為600，Height屬性值設為420，Left屬性值設為100，Top屬性值設為130。&lt;/p&gt;  &lt;p&gt;10. 完成之後，選取[File]--&amp;gt;[Save All]，存檔並關閉Expression Blend設計工具。&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;#160;&amp;#160; ----------------&amp;#160; 操作介面設計完成&amp;#160; -------------------&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;11. 使用VS 2008開發工具開啟Page.xaml，在Button控制項元素中設定Click事件對應的處理常式，然後按下滑鼠右鍵選取[巡覽置事件處理常式]：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/john.uuu/SMEDIjTKpDI/AAAAAAAACbU/E7It2qjx-Kk/s1600-h/%C3%ABg7%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="78" alt="快照7" src="http://lh4.ggpht.com/john.uuu/SMEDJtO4VEI/AAAAAAAACbY/gg4XekDJrL0/%C3%ABg7_thumb%5B1%5D.jpg?imgmax=800" width="325" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/john.uuu/SMEDK_gts-I/AAAAAAAACbc/jd0geMNmOZk/s1600-h/%C3%ABg8%5B3%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="116" alt="快照8" src="http://lh5.ggpht.com/john.uuu/SMEDL44c0qI/AAAAAAAACbg/FVW9mPwsdXU/%C3%ABg8_thumb%5B1%5D.jpg?imgmax=800" width="464" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;12. 接下來，我們要在Button控制項的Click事件處理常式(Button_Click)中，加入顯示開啟舊檔對話方塊的程式碼。如果你有在Windows Form當中使用OpenFileDialog控制項的經驗的話，那你將會覺得相當的得心應手。&lt;/p&gt;  &lt;p&gt;在Silverlight 2.0應用程式中，OpenFileDialog是定義System.Windows.Controls命名空間中的類別，提供了下面的屬性成員：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="550" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="151"&gt;Filter&lt;/td&gt;        &lt;td valign="top" width="397"&gt;篩選要顯示的檔案類型&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="151"&gt;FilterIndex&lt;/td&gt;        &lt;td valign="top" width="397"&gt;預設篩選的檔案類型&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="151"&gt;Multiselect&lt;/td&gt;        &lt;td valign="top" width="397"&gt;是否允許多選&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="151"&gt;SelectedFile&lt;/td&gt;        &lt;td valign="top" width="397"&gt;使用者選取的檔案&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="151"&gt;SelectedFiles&lt;/td&gt;        &lt;td valign="top" width="397"&gt;允許多選時，使用者所有選取的檔案&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;設定好之後，只需要呼叫ShowDialog方法，就可以顯示對話方塊了! &lt;/p&gt;  &lt;p&gt;13. 再加入更多程式之前，首先先在Page.Xaml.cs程式檔最前面宣告引用下面的命名空間：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="595" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="593"&gt;         &lt;p&gt;using System.IO;            &lt;br /&gt;using System.Windows.Media.Imaging;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;14. 接下來，在程式碼中建立下面的副程式，根據輸入的檔案類型，開啟檔案並透過TextBox控制項或是Image控制項顯示檔案內容：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="597" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="595"&gt;         &lt;p&gt;private void ShowData(FileDialogFileInfo file)            &lt;br /&gt;{             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (file.Name.EndsWith(&amp;quot;.txt&amp;quot;)) {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (StreamReader reader             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = file.OpenText()) {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; txtData.Text = reader.ReadToEnd();             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; reader.Close();             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; txtData.Visibility = Visibility.Visible;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; imgData.Visibility = Visibility.Collapsed;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (file.Name.EndsWith(&amp;quot;.jpg&amp;quot;)) {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; using (Stream data = file.OpenRead()) {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; BitmapImage image = new BitmapImage();             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; image.SetSource(data);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; imgData.Source = image;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; imgData.Visibility = Visibility.Visible;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; txtData.Visibility = Visibility.Collapsed;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;          &lt;p&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;blockquote&gt;   &lt;p&gt;其中，輸入參數FileDialogFileInfo的用途主要是用來接收使用者在OpenFileDialog物件中所選取的檔案資訊用的。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;15. 接下來，在Button_Click事件處理常式中加入開啟對話方塊的程式碼。首先建立OpenFileDialog物件實體，然後透過Filter屬性設定所要篩選的檔案類型。Filter屬性值必須要設為下面格式的字串：&lt;/p&gt;  &lt;blockquote&gt;   &lt;table cellspacing="0" cellpadding="5" width="400" border="1"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top" width="400"&gt;&amp;quot;檔案類型說明文字|篩選條件&amp;quot;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/blockquote&gt;  &lt;p&gt;完成設定之後，再呼叫ShowDialog方法顯示[開啟舊檔]對話方塊。若是使用者有選取檔案，則ShowDialog方法會回傳true，此時再將使用者所選取的檔案資訊透過ShowData方法顯示即可。完成的程式碼如下：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="678" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="676"&gt;         &lt;p&gt;private void Button_Click(object sender, RoutedEventArgs e)            &lt;br /&gt;{             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; OpenFileDialog openFileDialog1 = new OpenFileDialog();             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; openFileDialog1.Filter = &amp;quot;Text Files (*.txt)|*.txt|JPEG Files (*.jpg)|*.jpg;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; openFileDialog1.FilterIndex = 1;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; openFileDialog1.Multiselect = false; &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (openFileDialog1.ShowDialog() == true)            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowData(openFileDialog1.SelectedFile);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;16. 最後，在Page初始化完成之後，加入程式碼將TextBox控制項與Image控制項的Visibility屬性值設為隱藏(Collapsed)，程式碼如下：&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="5" width="598" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="596"&gt;         &lt;p&gt;public Page()            &lt;br /&gt;{             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; InitializeComponent(); &lt;/p&gt;          &lt;p&gt;&lt;font color="#ff0000"&gt;&amp;#160;&amp;#160;&amp;#160; txtData.Visibility = Visibility.Collapsed;              &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; imgData.Visibility = Visibility.Collapsed;&lt;/font&gt;             &lt;br /&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;17. 完成之後建置專案，然後執行測試網頁，就可以透過Silverlight 2.0的表單，開啟並顯示用戶端的文字檔或是圖檔內容了! 下面是完成的結果：&lt;/p&gt;  &lt;p&gt;&lt;iframe style="width: 800px; height: 600px" src="http://silverlight.services.live.com/invoke/77458/Open%20File%20Sample/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;但是就像一開始跟各位介紹的一樣，雖然我們可以在Silverlight 2.0應用程式當中開啟用戶端的檔案內容，但是因為瀏覽器框架本身執行環境上的限制，在預設狀況之下我們是無法透過Silverlight 2.0應用程式將檔案再回存到用戶端的檔案系統中。不過這沒有關係，因為這一個表單的主要用途，並不是開啟用戶端的檔案；&lt;font color="#ff0000"&gt;在雲端運算的分散式架構下，使用者的檔案資料是存放在Server上&lt;/font&gt;的! 因此將來&lt;font color="#ff0000"&gt;擴充這一個表單的功能，就可以提供使用者上載、新增、修改、儲存Server端檔案資料的介面，而在用戶端並不需要安裝額外的軟體!&lt;/font&gt; 我想，這才是SIlverlight 2.0表單迷人的地方。&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8136480488211782084-963281837926676
