Quantcast
Channel: 天空的垃圾場
Viewing all 144 articles
Browse latest View live

Visual Studio - 將Source Code同步到GitHub

$
0
0

延續前一篇,我們已經透過Visual Studio把Source Code簽入到本地的Git裡面,而俗話說的好,狡兔有三窟喔,不是,是檔案要多備份。所以這篇來介紹一下,如何透過Visual Studio,把本地端的Git簽入到鼎鼎大名的GitHub上。

( 這篇就不說明如何註冊GitHub了,如果有興趣的人,可以看這篇的前半段。 )

當註冊完後,就可以看到下面這個畫面,我們可以選擇New repository,來建立新的倉儲。

image

這裡有幾個需要注意的,基本上,名子自己開心就好,不過為了讓你(甚至別人)能看得懂,還是取一個看得懂的名子吧;接下來,只能選擇Public,如果要選擇Private則要額外付費;所以如果真的是不能對外的專案,建議用TFS雲端版吧( Team Foundation Service )。最後,如下紅字,千萬不能勾選。( 未來可能會改變,請自己注意tools的更新喔 )

要注意,目前如果勾選Initalize this repository with a README會讓Visual Studio出錯喔!!

image

完成之後,就把如下框框的位置給拷貝下來。

image

這時,我們回到Visual Studio裡面的Team Explorer,我們先按下"home”按鈕,就可以跳回首頁,然後在首頁的地方,選擇Commits。

image

這時候,會需要輸入Remote Repository的URL,如下圖,我們把剛剛拷貝的網址貼上去,並按下Publish。

image

然後會出現視窗,要你輸入GitHub的帳號密碼。

image

完成之後,就可以看到以下的訊息,告訴你已經完成了!!

image

這時我們回到GitHub上,並且刷新一下,就可以發現Code已經放上去了喔!!

image

就這樣,我們完成了這一個,喔,不是,完成了GitHub的部分了~

後記

其實小弟TFS和GitHub都滿喜歡的,GitHub通常小弟會建議放一些OpenSource的專案或是Demo,記得很久以前,有人曾給小弟建議,希望能把我寫的範例,放上去給大家參考,但那時候雖然有使用TFS,但畢竟TFS裡面的Code是沒辦法Public的,所以未來這部分的東西,就會透過GitHub來公開,也讓大家存取也方便;而TFS拿來當私有的專案則剛剛好,所以有需要的朋友們,也可以這樣劃分。

當然,到這邊為止,也只是很初步的應用,Git整套系統其實是很強大的,未來有機會,小弟再慢慢介紹吧~~ ( 感覺越欠越多東西…Orz… )

參考資料


Entity Framework - 使用Code First刪除欄位時,出現"未套用自動移轉,因為這可能會造成資料遺失。"警告

$
0
0

這篇是小小的紀錄文。

這個問題的發生,主要是因為,當我們使用Code First時,從Entity移除了一個欄位;例如原本的Customer裡面有Tel欄位,而把Tel欄位刪除掉時,再去Update-Database就會發生這個警告,而就如小弟所說的,這其實是一個警告, 不算是錯誤,因為沒有警告,就直接把DB的Table內容砍掉,大家可能會想殺人XDD,所以這邊Entity Framework會提出警告。

警告訊息如下

未套用自動移轉,因為這可能會造成資料遺失。

畫面如下:

image

那要怎麼處理呢?

其實只要把指令改成Update-Database -Force就可以了,另外,如果想知道更詳細的,可以下Update-Database -Script -Force,這樣他會帶出T-Sql給使用者確認。

image

大致上就這樣了,總之,在使用前,還是要先確認一下,裡面有沒有重要資料喔!!

後記

結果是去裝了VS 2012語言包,才找到相關資料…中文資源真的好少阿QQ..

參考資料

ASP.NET MVC - HTTP 錯誤 401.2 - Unauthorized

$
0
0

這篇也是小小品。

前幾天,朋友丟給我一個MVC的網站,說會發生401.2的錯誤,錯誤訊息如下

HTTP 錯誤 401.2 – Unauthorized

如下圖:

image

雖然錯誤訊息寫得很明顯,但還是找了很久,後來才發現,匿名驗證被停用了…

所以只要這樣改一下就好了,把停用改成啟用。

image

然後就正常了…

後記

當然,這只是其中的一個可能錯誤而已,但老實說,我找了好久XDD,所以紀錄一下,未來如果又遇到,還有地方可以找一下。

Entity Framework - 出現Cannot attach the file錯誤

$
0
0

這篇也是小小的紀錄文,稍微紀錄一下。

最近玩Entity Framework Code First玩得很大,而前一陣子,使用Code First的時候,要更新資料庫,卻出現Cannot attach the file的錯誤。如下圖。

image

Cannot attach the file 'C:\xxx專案\bin\Debug\xxx.mdf' as database 'xxxdb'.

其實Cannot attach the file的錯誤,有滿多種可能的,但這邊的情況主要是因為如下;這是這次發生問題的專案結構,小弟有分為主要的MVC專案和專門管Model的Model專案,而問題,主要是Web.config和App.config這邊。

image

好的,那為什麼會發生這個問題呢!!?其實很簡單,那是因為路徑上的問題與錯誤。

我們先用SSMS來看一下真正的mdf檔案在哪邊;當然,很對不起,很多東西都被反白掉了,但如果仔細看,我們可以發現mdf檔案和ldf檔案都在App_Data底下。

image

接下來,我們回頭看看MVC專案底下的Web.Config;是的,connectionString裡面的AttachDbFilename參數,指向的檔案位置是DataDirectory,其實這就是代表著指著專案底下的App_Data目錄;以上面的例子來說,就是MVC專案底下的App_Data目錄。

image

但實際上,當我們下達Updata-database指令的時候,卻是針對Model專案,如下圖。

image

那我們看一下Model底下的App.config,可以發現,也有AttachDbFilename的參數,而且也是指向著App_Data目錄,但其實我們真正的資料庫卻是在MVC專案的App_Data目錄阿!!

是的,所以當Updata-Database的時候,就會發生這種錯誤,因為資料庫的檔案,實際上根本就不存在Model專案的App_Data目錄下~~

所以解決的方式很簡單,我們只要把Model專案的App.config的ConnectionString的AttachDbFilename拿掉,就可以了,如下圖。

image

這樣在一次的updata-database就不會有問題了。

Visual Studio - 使用不同身分開啟VS2012

$
0
0

這篇大概是有史以來最簡短的一篇…但這個功能,有的時候做Demo又會用到,不記錄一下,我又常常會忘記…所以這邊稍微紀錄一下 ( 其實這招是偷學百敬老師的XDD )。

這個功能很簡單,就是使用不同的身分開啟VS2012(其實2010應該也可以),我們只要在VS2012的圖示上,按下shift加上滑鼠右鍵,就可以在跳出的選單中,看到"以不同的使用者身分執行"。

image

按下後,就需要輸入另外一位使用者的帳號密碼,完成後,就可以以不同的身分進入VS2012了。

image

就這麼簡單…純粹記錄文XDDD

參考資料

  • 百敬老師XDD

Entity Framework - 使用Code First模式 Ver 5.0

$
0
0

還記得大概一年多前,EF 4.1的時候,小弟我有非常簡單的介紹過Code First,然後就沒消沒息了XDD,其實後續還是有一兩個case有稍微用過這個東西,但是當時用,也不算是真正的Code First,而是偽Code First ( 因為還是先建立DB Table,再利用工具去產生Class… ),而中間,也不斷被真正愛用Code First的人,給問倒問題XDD。

當然,無論是官方的推崇,與國外的論壇,小弟也知道Code First的好處,但沒全力投入,還是無法深深的感覺到;其次,通常都是一人專案,要如何帶到整個Team協同,也是一個問題…特別是DBA反彈的聲音最大…( 還好現在Team裡面的dba很好講話XDD 是個好人~~ );而最近,剛好有機會,就強迫教育了Team member,正式把Code First帶到Team裡面,而Team member裡面使用過的人,都說讚!!( 好險- -||| )

經過一年,EF也已經5.0版本,甚至已經在跑6.0的阿發版本了,官方的各大專案,也使用Code First當作基礎,所以,小弟一年過後,又回來重寫一下之前的文章啦XDDD

What’s Code First

不知道大家是怎樣開始專案的呢?我相信,最常聽到的應該是,看使用者的需求,然後來規劃資料庫,畫出ER圖,然後就開始努力地下去Coding了( 這裡就不討論怎樣軟體開發流程是好是壞了。 )。

接下來呢!?早期小弟在寫ASP的時候,會在裡面加上一堆SQL、邏輯、畫面,組合成義大利麵式的程式碼!( 可惜實際上不夠美味 ),後來使用ASP.NET的時候,也差不了多少,一樣在.cs的檔案裏面放上一堆SQL,只是那時候用Dataset,感覺上比較高級了,後來懂得把Table變成一個又一個的物件,至少有拆開了=w=,到現在,會使用Repository Patten來拆開資料存取層,也會利用EntityFramework來進行ORM,至少有進步了XDD。

但是無論怎樣的設計上,還是會先考慮資料庫模型,想好Table的關聯,畫好ER圖,建好DB後,在開始寫程式。

而這樣的作法,也不是說好或不好,畢竟,沒有不好的方法,只有用錯的地方=w=,但今天,EntityFramework帶來另外一種作法,也就是Code First。( 如果先建立DB,就稱為DB First,如果利用EF工具,先建立好模型,就稱為Model First。)

廢話了一堆,Code First,簡單的說,就是不先建立db,也不用EF的工具建立模型,而是直接利用建立好的類別產生DB!

有沒有很酷!,老實說我覺得酷斃了,尤其是像小弟那麼懶的人,每次想到還要建立Table,真的就懶了…還是寫Class比較親切!?…

建立Code First Demo

首先,我們這個case就用MVC來Demo吧 ( 但不會講到MVC喔 ),建立完MVC後,可以去NuGet檢查一下,是否有Entity Framework套件。

image

然後,假設我們要寫一個客戶的管理系統,那自然,就要先建立一個客戶的Class,我們新增一個Class,取名為ClientBasic。

接下來呢!?當然就是開始打ClientBasic的程式碼啦!,那db呢!?,別忘了我們現在是Code First,顧名思義,就是先打Code!!

我們建立一個ID,代表唯一的編號,和一個Name,就這麼簡單。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace TestMVC.Models
{
    public class Customer
    {
        public int ID { get; set; }
        public string Name { get; set; }

        
    }
}

然後,我們要建立另外一個程式碼,這個程式碼主要繼承於DbContext,簡單的說,就像是個資料庫一樣的感覺,而另外要注意的是,我們也要有個建構子,並且傳入字串"name=TestContext",這個字串的意思,是代表,我們App.config( 如果是網頁,則是Web.config ),裡面會有TestContext的連線字串;接下來,我們會設定一個屬性為ClientBasics( 這裡通常會用複數 ),而這個屬性是DbSet型別,而這個屬性,感覺就像是Table一樣。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;

namespace MigrationsCodeDemo
{
    public class IMSContext : DbContext
    {
        public TestContext()
            : base("name=TestContext")
        {

        }
        public DbSet<clientbasic> ClientBasics { get; set; }
    }
}

接下來,我們看一下App.config( 或是Web.config ),我們需要一個名稱為TestContext的連線字串,這邊我們使用LocalDB,如果想要連線到SQL Server 2012,就直接給SQL Server 2012的連線字串。

<connectionStrings>
     <add name="TestContext" providerName="System.Data.SqlClient" 
         connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=TestContext;
         Integrated Security=SSPI;
         AttachDBFilename=|DataDirectory|\TestContext.mdf" />
  </connectionStrings>

接下來,我們去修改一下HomeController,在Index的這個Action下,把剛剛打好的TestContext物件給new起來( 變數稱為db ),而這裡面會有許多方法,用來處理所有和資料庫有關的行為,這邊我們new了一個新的Customer物件,並且加入到TestContext裡面( 可以想像成,加上一筆資料),而裡面有屬性Name( 可以想像成欄位Name ),值為Sky,最後利用SaveChanges方法,就會將資料寫回到資料庫。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TestMVC.Models;

namespace TestMVC.Controllers
{
    public class HomeController : Controller
    {
       
        // GET: /Home/
        public ActionResult Index()
        {
            var db = new TestContext();
            //新增一筆資料
            var cust = new Customer();
            cust.Name = "Sky";
            db.Customers.Add(cust);
            db.SaveChanges();
            return View();
        }
    }
}

然後,我們把執行看看。( 當然,View要自己建立阿~@@~ )

當我們去看資料庫,就會發現,他自動地幫我們建立了資料庫和Table!!,神奇吧!!就如前面所說的,我們可以完全不用考慮db該如何建,而會專心思考物件要怎麼寫!!

另外,這邊要特別補充,並不是把TestContext給new出來,db就會自動建立,而是會在真正新增刪除修改查詢db的時候,才會觸發建立db的動作…此外,也別忘記,Linq有延遲載入的功能,所以上面範例,才會使用add當作範例。

image

如果去查資料,可以查到一筆

image

後記

小弟這個範例,就是很簡單的先去建立類別,然後資料庫就自動幫忙建立起來了,但是聰明的你應該已經注意到了,那如果Class的屬性增加後,資料庫會不會自動變更!?答案已經很清楚了,在EF他會丟出例外給你看XDD,早期遇到問題,必須先刪除掉資料庫,才能重新Run一次,但現在,EF已經提出新的機制了( 其實一年前就提出了 ) 有興趣的可以參考這篇來解決此問題。

參考資料

  • http://msdn.microsoft.com/zh-tw/data/ee712907
  • SQL Server - 神奇又好用的File Table

    $
    0
    0

    老實說,完全沒想到,會寫到SQL Server的這個功能,也多虧了公司內,強大的DBA同事Winnie,和神人百敬老師的一步一步指導,所以就在這邊紀錄一下,不然根據小弟的老人痴呆,大概過幾天就忘記了吧- -…

    但是開始前,還是要敘述一下,甚麼是File Table,是的,顧名思義,就是存放檔案的Table,但存放的不是超級大的二進位檔案,而是這個檔案的資料,例如,檔名等資訊。

    不過就只存放這些東西,好像也沒甚麼大不了的?,但File Table真正神奇的是,它可以和目錄去做關聯!!是的,簡單的說,就是某個路徑下,存放了某個檔案後,Table就會自動新增這筆資料,如果砍掉,這筆資料就會自動消失!!

    沒錯,就是這樣的神奇,所以,基於小弟要朝向"潮"的型男之路邁進,所以決定嘗試一下這個很"潮"的技術…

    首先,開始前先提醒大家,目前LocalDB是不支援此功能的,如有興趣,可以裝SQL Server 2012的正式版本,或是SQL Server 2012 Express,目前小弟是裝Express版本。

    如果是第一次安裝,其實可以看到FILESTREAM,預設是沒有安裝的,其實File Table底層就是FILESTREAM,如果這邊不知道該怎麼輸入,也可以先略過,未來再開啟。

    image

    當裝完後,要使用File Table,就一定要打開FILESTREAM,要打開FILESTREAM就必須先打開SQL Server組態管理員(如下圖),其中最後面允許遠端存取,通常都會打勾,但下圖沒截到圖,所以這邊提醒一下大家。另外要注意的是windows共用名稱,這個名稱未來會變成目錄結構之一,所以也在這邊提醒大家一下。

    image

    接下來,用SSMS登入後,我們要執行一下如下指令。

    EXEC sp_configure filestream_access_level, 2 
    RECONFIGURE
    

    完成如下圖,完成之後,我們再重新開一下SQL Server。

    image

    接下來,我們要用SSMS來進行設定,我們先選擇我們這台SQL Server,並且設定伺服器屬性,先去如下圖的位置,確定FILESTREAM存取權限是否已啟用完整存取。

    image

    SQL Server設定完後,我們要針對要執行的DB,進行設定,以下圖,我們要針對Test的db進行設定。我們這邊要設定檔案群組。

    image

    設定完檔案群組後,我們要繼續設定檔案的部分。我們要新增一個FILESTREAM的檔案。

    image

    接下來,我們再到選項的地方,我們要填入FILESTREAM目錄名稱,並且把FILESTREAM非交易式存取設定為Full,這樣才能讓檔案總管來存取,如果沒有設定Full,就只能透過SQL Server來進行檔案的存取,但透過SQL Server進行檔案的存取,其實是會消耗SQL Server的IO的,所以沒有特別需要,還是利用檔案總管來存取比較好;其次,目錄名稱也請特別注意,這個部分未來也會形成存取檔案的目錄結構之一。

    image

    最後,我們就使用T-SQL語法來建立File Table。

    image

    當然,他會產生一長串的T-SQL如下圖,我們只要稍微編修一下。

    image

    編修後的Code如下,基本上,比較需要注意的是FILETABLE_DIRECTORY的這個設定,這個設定也會牽涉到目錄結構,如果大家對其他語法有不懂的,底下的參考連結有MSDN的網址,大家可以去看看喔。

    -- =========================================
    -- Create FileTable template
    -- =========================================
    USE Test
    GO
    
    IF OBJECT_ID('dbo.FileTable', 'U') IS NOT NULL
      DROP TABLE dbo.FileTable
    GO
    
    CREATE TABLE dbo.FileTable AS FILETABLE
      WITH
      (
        FILETABLE_DIRECTORY = 'FS',
        FILETABLE_COLLATE_FILENAME = database_default
      )
    GO
    

    建立完成後,就會看到新的Table了。

    image

    最後,我們只要用檔案總管,就可以來新增檔案;這時候,大家可以發現,必須要用網路芳鄰的方式來存取檔案,而這個路徑,就是我們一路設定過來的路徑名稱。

    image

    最後,如果我們在這個資料夾,新增一個txt檔案,再回到Table裡面去看,我們可以發現,Table已經同步更新了喔!!

    image

    此外,如果我們從資料庫刪除了此筆資料,那檔案也會同步不見喔!!有沒有超級方便的!?

    到這邊就完成了,當然,除了透過檔案總管外,也可以透過資料庫來存取資料,如果想知道更詳細的作法,可以參考MSDN喔!!

    後記

    還是要感謝老師們,不捨棄我的教我一步一步完成QQ…

    參考資料

    Scrum - 台灣第一次的敏捷國際研討會

    $
    0
    0

    6/20是台灣首次的敏捷國際演討會,說到敏捷,雖然台灣喊了很久,但一直在產業裏面都起不太來,而過了好長的一段時間,台灣終於有比較大規模的研討會了。

    而這次,其實最吸引我的是神級的人物Scrum的創辦人之一Ken,所以抱持著朝聖的心情,就跑去瞻望一下=v=,其次,這次吸引我的另外一個原因,是幾乎都請到國外有經驗的公司經理來分享,不過比較可惜的是,這方面的分享,還是比較偏重於敏捷的好處…針對如何導入,還有導入的過程與方法,比較沒有多的琢磨,不過這也是因為每個場次時間不夠的關係。

    以下是這次的圖文紀錄,大家就看看圖吧

    第一場,是由神級的人物,Scrum的創辦人之一Ken Schwaber視訊來幫我們演講。

    IMG_1631

    原本Ken打算直接來到會場,但因為身體欠安,所以現場直接用Skype和Ken進行會議,

    IMG_1632

    Ken特別提到,大型Team更需要Scrum與敏捷,因為在過程中,要整合每一個團隊,更需要利用不斷迭代來進行整合。

    接下來下一場,有提到Story是最重要的,而且是由Story產生Test Case,剛好也和小弟之前讀的書,相吻合,這又讓我想到91哥的BDD。

    IMG_1633

    其次,講者有提到,SCRUM的幾個重點。

    1. 分解故事
    2. 定期交貨
    3. 敏捷與Architecture的關係

    比較有意思的是Architecture這塊,所以講者列出了下圖,而依據專案團隊的大小,就會有不同的做法,其中也提到,如果真的是大型系統,也不可能沒有文件,畢竟定義大型系統,還是會需要文件產出,總之,和寫Code一樣,系統的大小,也會取決於不同的做法。

    IMG_1634

    另外,有提到關於Story的三個重點

    1. 要不斷的整理Story,而整理的Story之時間點,應該在下次開始前,完成。
    2. Requirement Analyst,Developer,Tester都要出席
    3. INVEST,也就是Independent、Negotiable、Valuable、Estimable、Smail、Testable.

    但可惜的是INVEST因為時間不夠,也沒時間講解清楚。

    而最後講到這張投影片的時候,時間有點不夠,所以跳著講了,滿可惜的,大家就看看投影片吧。

    IMG_1635

    下一場是講PM和敏捷之間的關係。

    講者有提到,敏捷其實不會完全改變整個企業流程,真正會變動的,可能只有中間一小塊。

    IMG_1637

    有提到目前公司舊有的流程。

    IMG_1638

    實際上,導入敏捷主要影響中間那塊而已,但這個部分,其實小弟是保留著一些看法,不過畢竟小弟不是專業的PM,這個問題,就留給專業的PM人員吧= =+。

    最後,講者的總結。

    敏捷很棒,但不是萬靈丹。

    IMG_1639

    下一場,是好友Franma,和熟悉的TFS,因為是好友,所以特別把他的人拍進去 ( 誤 )…Franma目前在國內也幫許多家超大型企業導入過敏捷,所以他講課的內容,深深的感受到,他在台灣導入敏捷的心路歷程XDDD。

    不過也因此,他的內容,也非常的貼切台灣團隊遇到的問題。

    IMG_1640

    他首先提到,微軟的團隊已經分散到世界各地,但散在世界各地,要如何統一哩?

    IMG_1641

    結論當然是TFS,Microsoft目前全部都使用TFS來進行管控了,從一開始的VS,到現在的Windows 全部都用TFS做管理了。

    IMG_1642

    另外,Microsoft現在也開始執行敏捷( Scrum的創辦人之一Ken,都親自駐點到MS裡面指導了=V= ),所以現在產品更新從原本的18~24個月,變成每三個月 ( 所以我們快被搞死了= = )

    這時候講到Daily Scrum,是否有Daily Meeting,就可以看出這個Scrum的成效了。

    IMG_1643

    這時候講到Product Backlog的關係,應該是由上而下。

    IMG_1644

    下面這張圖,更提到了由上而下,才能順利地抓出每個功能與進度。

    IMG_1645

    接下來,下午場次,是很特別,從對岸同胞過來講的。

    2013-06-20 13.08.39

    他有提到以前公司很難推動的,現在則非常容易推動,甚至自然而然就發生了。

    2013-06-20 13.22.35

    然後敘說,公司怎樣才會有優勢。

    2013-06-20 13.28.25

    最後講到敏捷的Scrum和XP。

    2013-06-20 13.35.38

    全部講完後,接下來是全體發問時間,不過因為距離有點遠,所以手殘,照片就糊掉了,請大家見諒阿XDD,而發問時間,其實還滿訝異的,大家發問的問題還滿多的,而基本上遇到的問題都還是"如何說服老闆"XDD,而基本上,就還是先從小團隊慢慢做起吧,當有成效的時候,才比較好和老闆推薦。

    2013-06-20 13.48.17

    最後是頒獎和抽獎品時間,獎品聽說有Ken的簽名書,和iPad Mini,正當我還在猶豫,我到底是比較想要Ken的簽名書還是iPad Mini的時候,就已經抽獎完了- -…

    2013-06-20 14.43.54

    最後,也很感謝Dann的邀請,參加了後續的高峰會議,而高峰會議真的談論了很多東西,而最令人深刻的還是CMMI和敏捷的議題;而講師也明確的提出,這是不牴觸的,就如前面提到,在大型的公司裡面,還是會需要流程的文件與控管,而CMMI Level 3也加入了Scrum的項目,但小弟CMMI還沒深入研究,就不再這邊多發表意見了…

    以上,就是這次參加活動的照片,期待的第二年的舉辦喔!!


    Windows Azure - 錯誤The page cannot be displayed because an internal server error has occurred.

    $
    0
    0

    最近朋友問到小弟一個問題Azure Web Sites的問題,錯誤的畫面是。

    The page cannot be displayed because an internal server error has occurred.

    如下圖,就這樣的簡潔有力。

    image

    而朋友就算把CustomerErrors mode 關掉,還是只會出現如上的畫面。

    <system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5" />
    <customErrors mode="Off" />
    

    通常,發生這種錯誤,幾乎都是Server層級的錯誤,有可能Web.config設定出錯之類的,所以也不會出現傳說中的黃底畫面。

    那這種問題該如何解決呢?,就必須透過log機制去看了,在看之前,我們必須先把log機制打開;如下圖,將詳細錯訊息設成開啟。image

    這時候,我們再登入FTP,就可以找到DetailedErrors的目錄。( 如果不知道如何登入FTP的朋友們,可以參考這篇,雖然那篇是講上傳,但Log的紀錄也是存放在同樣位置。)

    image

    進入後,就可以看到ErrorPage00001.htm,這就是錯誤畫面,我們把這個複製出來看看。

    image

    如下圖,我們熟悉的畫面就出現了,這時候我們就可以知道詳細的錯誤訊息來解決了~

    image

    大致上就這樣,給剛好有遇到問題的朋友們吧~

    Windows Azure - 在Web Site下使用Azure SQL Database來存放Session

    $
    0
    0

    之前在4月的時候,講過Azure的課程,當時在Web Site底下,要使用Azure SQL Database來存放Session是件很麻煩的事情,因為還要建立資料庫等等。

    但現在不用那麼麻煩了,經過小朱前輩的指導,現在官方已經使用Code First來自動建立資料庫了!!,所以之前寫的那篇,大家可以扔到垃圾場去了..

    以下文章是前篇的改良版。

    相信如果有讀過這篇( p.s 現在官方強烈建議,不要再用Azure Storage當Cache了),那可能會知道,不管是Cloud Service或是Web Site,前面都會有用到Load Balance,當然,如果後面只有一個站台,那就沒甚麼差,但如果後面有兩台以上的站台來分流,那Session的議題就變得很重要了…

    而Cloud Service很佛心的準備了內建Cache來解決這部分的問題 ( 不然用Azure Cache會貴森森… ),那Web Site呢!?其實除了貴森森的Azure Cache外,還有大家常知的…沒錯!!就是使用SQL Server來存放Session!!

    當然,我們不會傻傻的Web放到Azure上,但卻把Session放在陸地上…所以,這篇的目的,就是要介紹,如何使用Azure的SQL Database來存放Session!! ( 嗯,或許大家會擔心效能上的問題,但根據可靠情報指出,目前Azure 上的SQL Database都是用SSD喔!! )

    準備SQL Database

    首先,我們當然要先去SQL Database來開一個新的SQL Server,這邊我們是要測試,所以很快的快速創建就好。

    image_thumb5

    是的,這樣db就完成了,不用像以前一樣,麻煩的做一堆事情,而到這邊,SQL Database就準備妥當了。

    ASP.NET的修改( MVC同 )

    其實ASP.NET的處理很簡單,我們首先先到NuGet取得以下套件,到線上的地方去搜尋Universal Providers,就可以找到Microsoft ASP.NET Universal Providers Code Libraries和Microsoft ASP.NET Universal Providers,而其實真正重要的是Code Libraries,也可以只裝Code Libraries。

    ( 其實也可以直接安裝ASP.NET Universal Providers,裝上去的時候,也會一併把ASP.NET Universal Providers Core裝上,其實Core是ASP.NET Universal Providers的底層核心,當安裝ASP.NET Universal Providers的時候,就會順便把ASP.NET Universal Providers Core裝起來,並且順便修改Web.Config;但如果直接裝Core,則不會協助幫忙修改Web.Config,變成要自己在Web.Config加上等下講到的程式碼。 )

    image

    如果直接裝了Microsoft ASP.NET Universal Providers,那它會自動在Web.config加入以下的Tag。

    <profile defaultProvider="DefaultProfileProvider">
          <providers>
            <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
          </providers>
        </profile>
        <membership defaultProvider="DefaultMembershipProvider">
          <providers>
            <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
          </providers>
        </membership>
        <roleManager defaultProvider="DefaultRoleProvider">
          <providers>
            <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
          </providers>
        </roleManager>
        <!--
                If you are deploying to a cloud environment that has multiple web server instances,
                you should change session state mode from "InProc" to "Custom". In addition,
                change the connection string named "DefaultConnection" to connect to an instance
                of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.
          -->
        <sessionState mode="InProc" customProvider="DefaultSessionProvider">
          <providers>
            <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
          </providers>
        </sessionState>
    

    是的,其實Microsoft ASP.NET Universal Providers不只是session而已,他還包含了User 、Role等東西,所以覺得Web.config很雜亂的話,也可以把其他的註解調或是刪掉也可以啦…

    而現在,我們還需要修改一下Web.Config裡面的SessionState那邊,改成Custom的設定就可以了。( 或許有人會問,為什麼要填寫Customer,而不是SQLServer,原因很簡單,因為官方上面那串綠色的註解是這樣寫的阿XDDD,官方上面寫到,如果要部屬到Cloud環境,而且有多個Instances的話,要把InProc改為Custom,這也就是為什麼要改成Custom的原因… ),其次,因為我們會存放到Azure SQL Database,所以還要改一下連線字串,那連線字串的名稱呢!?是的,就是第二個紅色框框"DefaultConnection"。

    image

    會變成如下

    <sessionState mode="Custom" customProvider="DefaultSessionProvider">
          <providers>
            <add name="DefaultSessionProvider" 
                 type="System.Web.Providers.DefaultSessionStateProvider, 
                 System.Web.Providers, Version=1.0.0.0, Culture=neutral, 
                 PublicKeyToken=31bf3856ad364e35" 
                 connectionStringName="DefaultConnection" />
          </providers>
        </sessionState>
    

    接下來

    我們用搜尋的方式找到DefaultConnection( 建議用搜尋的方式,這樣才不會不小心建了兩次的DefaultConnection ),並填入連線字串,而再填入前,要先找到Azure SQL Database的連線字串。

    image

    然後選擇儀表板

    image

    然後選擇連線字串,就可以看到了,接下來就把整個連線字串複製下來。

    image

    最後貼到Web.conig。

    image

    會變成如下

    <connectionStrings>
        <add name="DefaultConnection" providerName="System.Data.SqlClient" 
             connectionString="Server=tcp:dkegao7az4.database.windows.net,1433;
             Database=ASPNETSessionTest;User ID=sky@dkegao7az4;Password=自己的密碼;
             Trusted_Connection=False;Encrypt=True;Connection Timeout=30" />
      </connectionStrings>
    

    完成後,如果有存取到Session,就可以用瀏覽器的Developer工具來查看Cookie裡面紀錄的Session ID。

    image_thumb51

    我們可以透過Azure的db管理工具,看到Sessions Table已經自動幫我們建立起來了。

    image

    我們也可以從裡面看到,已經有對應的SessionID了,所以可以確定,這樣就已經把SESSION存放到DB裡面去了。

    image_thumb4

    題外話,因為Web Site前面的LB機制會自動認ip,所以通常狂按F5是測試不出來的,所以如果覺得這樣還不能證明,還可以手動去調整Web Site,如果沒有把Session存放到DB裡面去,當改變Web Site的時候,是會掉Session的,但如果存到db裡面去,就不會有這種問題了。

    image

    基本上,這樣就完成了~

    後記

    現在透過Web Site,其實整個機制就和一般使用IIS一樣的方便,而且Azure DB的效能也好很多,重點是,也不用自己多做甚麼事情,幾乎都可以輕鬆搞定,這邊,也很感謝小朱前輩利用中午吃便當的時候,一邊被我騷擾,一邊和我說有這種東西,在這邊再次感謝他,如果大家有興趣,下面的參考資料,也有小朱前輩上次上課的超詳細步驟解說!!

    最後的最後,也提醒大家一下,這邊的範例,因為方便,所以在撰寫的時候就直接把Connection換成Azure SQL Database,如果在真正的專案執行上,也可以透過VS的發佈工具,動態的改變DB的Connection String,讓開發的時候使用LocalDB,正式的時候,使用Azure SQL Database喔~

    以上,謝謝大家~~

    參考資料

    專案下載

    紀錄文 - Visual Studio 2013 Preview!!

    $
    0
    0

    是的,又遇到一年一度的Windows OS 大拜拜Build 2013!!,每年到了這個時候,又要開始熬夜的熬夜,學習的學習,還記得大概是前年吧,遇到這個Build大拜拜的時候,還剛好是台灣的TechDays...不斷要熬夜的看Windows 8,隔天還要努力的在TechDays聽課…

    而這次的大拜拜,Microsoft端出了Windows 8.1和Visual Studio 2013、Windows Server 2012 R2,SQL Server 2014,和上次不同的是,這次比較沒有統一叫做2012了XD。

    還記得當初Visual Studio 2012測試的時候,老實說,讓我感受到震撼的就是那個配色XDD,而回想當初,其實現在2013推出,老實說,真的沒過多久,其實這也是拜Microsoft跑敏捷、Scrum的成果,但反過來說,我們這些白老鼠們,可能就會累死了…

    OK,回到主題,雖然這次Visual Studio 2013 Preview很快地推出,但大家其實也不用太擔心,因為Preview到正式版本,還有一段路要走~

    最後,這篇依舊是個沒有啥內容深度的紀錄文Orz…留給我自己做個紀錄紀錄…畢竟以後正式版,還有很多調幅的空間,所以請各位大哥大姊前輩學姊們多多見諒了喔~

    最後,如果有興趣搶先遊玩,可以參考小弟最後的連結,小弟我會把所有的下載連結放在最後面。

    這次,比較特別的是,小弟沒用自己的PC,來測試這些新軟體,而是使用Windows Azure來測試,或許大家會想說,是因為小弟特別愛用Azure嗎??..其實是因為小弟的PC掛掉了- -…

    目前Azure已經有放上了Windows Server 2012 R2 Preview和SQL Server 2014 CTP1,甚至,如果有興趣的話,也可以玩玩看Sharepoint 2013~( 也有提供VS2013的VM,但小弟想自己裝一次..SO~~ )

    image

    除此之外,MSDN也提供下載,不過這次速度滿快的,除了MSDN的人員外,MS也提供了一般使用者下載。( 不過不是放在MSDN,而是放在其他的位置 )

    image

    另外,這次MS很有誠意的,也把繁體中文語系給丟上了來!!超佛心的啦!!

    image

    下載完後,就是安裝畫面,基本上和2012沒啥兩樣。

    image

    另外,這次比較特別的是,原本要額外安裝,並且歸屬於SQL Server的SSDT,現在內含到Visual Studio 2013了( 難怪好友Terry說,他在SQL Server 2014沒看到- -… ),此外,Windows Phone 8 SDK預設是沒勾選的…因為跑Windows Phone 8的模擬器,是要啟用Hyper-V的。

    image

    開啟後,Visual Studio 2013會要求我們登入,根據中文敘述,會同步狀態設定,至於到底會做到怎樣,等下一個版本再裝起來的時候,就可以知道了=v=。

    image

    登入後,就是啟動前的設定畫面,可以從這邊設定,喜歡的配置,並且選擇顏色,現在藍色也可以自由選擇了。 ( 小弟當然還是用黑色阿!!! ),另外,比較特別的是那紅底白字的SC,不知道是不是名子的縮寫。

    image

    開啟後,就是令人熟悉的中文介面!!其實和Visual Studio 2012外觀差不多,所以中文翻譯大致上也應該是直接套用吧,而比較特別的是,右上角會出現名子,還有在搜尋旁邊有一個提示的旗子標示,至於那個笑臉,如果有裝過Office 2013體驗版的朋友們,可能就會有印象,那個是回報用的,我猜未來正式版,那個笑臉應該會不見吧…

    image

    而如果打開WEB專案,可以發現,現在統整到ASP.NET Web應用程式…

    image

    打開後,可以再選擇自己要的~~,當然,這方面的更新,之前前輩們都寫得很詳細了,就讓小弟草草帶過吧~ ( 逃 ) ( p.s 或許大家會發現有些東西還沒翻譯,那是正常的,官方也提到,那是因為有些東西還沒翻譯完~ Preview嘛~~ )

    image

    至於Cloud專案,很抱歉,還是要自己取得SDK ( 翻 )。

    image

    基本上就這樣了~~詳細的,有空再玩吧~@@~

    最後附上下載網址。

    http://www.microsoft.com/visualstudio/cht/2013-downloads

    紀錄文 - Visual Studio 2013 Preview 的新功能 - 版本控制篇

    $
    0
    0

    這篇是邊體驗,邊寫的紀錄文了,基本上,大家就隨意看看吧,畢竟正式版還沒出來,也沒辦法真的花很多時間下去測試和撰寫,有錯的話,也請多見諒喔,因為很多可能還沒仔細查證。

    這篇主要是版本控制,未來如果有發現甚麼東西,會再補充上來。

    初始就預設了Git!!

    在新的Visual Studio 2013 Preview 還沒將Team專案連線,就出現了Git,看來Git是內建的版控機制!?其實這樣也有非常大的好處,只要裝好Visual Studio 2013 Preview後,就可以在Local進行版控,如果還有進一步的備份需求,還可以用到GitHub,而如果有私人不能公開的專案,還可以再改用TFService,而如果公司擔心,還可以自己架設TFS。

    image

    當建立了Repo後,就可以使用了…所以看起來Git真的內建了…,另外,如果有需求,也可以額外安裝Git工具。

    image

    TFS!!

    如果是連線到TFS,這次漂亮多了…,其實這樣的感覺還不錯,以前常常按錯,現在有圖案後,就比較清楚了。

    image

    另外,以前的Team Explorer都會在同一個框框裡面,現在可以跳出來…這…算新功能吧!?但不管怎樣,至少,可以同時看到我的工作,和組建等等。

    image

    現在如果按了工作面板等,他就會自動帶出網頁 ( 用瀏覽器帶出 )。

    image

    另外一個貼心的地方,如果設定了工作區,現在有方案列表,以前都要點進去檔案才能開啟說…

    image

    這次大致上只看到這邊,未來如果有新的部分,再繼續追加下去。

    ASP.NET MVC - OData與JayData找不到導覽屬性的原因

    $
    0
    0

    這篇是比較複雜的整合後產生的問題,關於ODtat和Web Api還有JayData的關係,近期會再有文章來補充。

    最近花了一些時間查了這個問題,所以在這邊紀錄一下;這個問題主要是當我們使用EF進行多對多,或是1對多的時候產生的問題 ( 其實也不算是問題,主要還是因為Web API暫時不支援,但官方已經開始在撰寫了 );問題主要如下。

    我們都知道,使用OData可以輕易的透過網址取得想要的資訊,例如取得Customer,但如果今天Customer和Order有關聯,而且一個Customer會有多個Order時 ( 也就是1對多關係 ),那OData還有一個$Expand的語法可以用 ( 題外話,多對多也適用… )。

    而JayData官方的寫法如下,假設這個範例是DigitalArchives和SubCategory有關係,而且是多對多的關係,我們可以利用JayData來幫忙查詢。

    $data.initService('/OData', function (dbFactory) {
        var mydatabase = dbFactory();
        mydatabase.DigitalArchives.include("SubCategory")
            .filter("it.ID == 1")
            .forEach(function (c) {
                //do something
            })
    });
    

    而我們啟動瀏覽器,就可以看到,他會把上面的語法轉換成OData網址,並使用$Expand來includ相關聯的物件。

    image

    如果實際去看這個網址吐出來的東西,是找不到inclde的SubCategory屬性的。

    image

    會這樣的原因,是因為OData 3.0開始,為了讓OData傳輸的資料輕量,所以不會主動地把關聯的導覽屬性加進來,而要使用$Expand的方式,而目前Web Api還不支援$Expand( 官方已經在開始處理了 )。

    而這邊也給大家看一下,如果是2.0版本,會出現怎樣的效果。如果想看舊版的,可以在輸入Content-Type: application/json;odata=verbose,呈現的效果如下。( 使用Fiddler2對http://localhost:2261/OData/DigitalArchives(1)偵錯。)

    image

    反正不管怎樣,就是因為Web API不支援…

    所以該如何做呢??基本上,小弟目前只想到兩個方法,第一個是用OData Action,自己定義一個Action,但目前Action沒辦法傳回Collection,只能傳會Array…

    第二個方法,就是使用如上圖的網址,但小弟目前也找不到JayData產生如上圖網址的方法,所以只能用Ajax去呼叫上面網址,取得JSON後再去處理。( Web Api 要另外撰寫方法。 )

    總之,最後的結論,只能用第二種方式暫時的解,等Web Api更新。大體上是這樣了~

    參考資料

    Visual Studio - 利用Team Foundation Service當代理伺服器進行負載測試

    $
    0
    0

    前幾天,小弟我把Visual Studio 2013裝完,沒過多久,好友Franma就興高采烈地打電話來,和我也紹了這個新功能( 不虧是台灣MS工具推廣第一人- -… ),不過,稍微看了一下後,真的發現,這真的是個強大的功能!!既然師承Franma,那身為小弟的我,就擔任起寫文章的腳色,在測試的過程中,就順便紀錄紀錄…

    備註,此功能目前需要Visual Studio 2013 Preview 和 Team Foundation Service,另外,也不會針對負載測試的設定內容詳細敘述,如果對負載測試有興趣的朋友們,可以參考百敬老師的這篇文章

    還記得以前,第一次上負載測試的時候,就遇到滑鐵盧,因為還要準備db…而現在已經預設支援localdb了( Localdb真是好物~~),後來又遇到測試機器等級的問題…

    而今天,利用Team Foundation Service來當我們的測試機器,我們再也不用特別的去準備另外的代理伺服器了!!

    首先,打開Visual Studio 2013後,就可以新增一個Web效能和負載測試專案;基本上和以前一樣。

    image

    接下來,我們只要點選Local.testsettings,就會出現設定。

    image

    另外比較和以前不一樣的是,可以設定32位元,或是64位元。

    image

    接下來,我們要錄製一下測試的樣本,簡單的說,就是要針對哪裡(哪個網站)做哪些事情;選擇加入要求;這邊指的是要對哪個網站進行瀏覽,如果比較大量,也可以選MENU紅色的錄製按鈕,會帶出IE讓大家輕鬆錄製。

    image

    接下來,選擇要攻擊,喔,不是,要測試的URL。

    image

    存檔後,我們就可以準備負載測試,接下來,針對此專案(WebAndLoadTestProject),加入新的項目。

    image

    接下來,和以前一樣,需要輸入一些東西;這邊因為我們只是單純的壓壓壓,所以根本不用去模擬使用者在網頁上的考慮時間。( 考慮時間就是說,使用者會去想,要點甚麼 )

    image

    接下來,要設定使用者人數,基本上,我們只是稍微測試一下此功能,所以一次就給他25人,而不需要依據每秒的時間慢慢往上加。

    image

    接下來,這邊選擇按總測試數,其實因為小弟我也只有一個測試,所以根本沒差…( 這邊的選項,會依據測試混合所設定的測試項目,來依據比例測試,不過因為小弟我也只有一個測試案例,所以根本沒差啊XDDD )

    另外自己補充( 因為這邊常常忘記0 0 ),總測試數,表示當下使用者會隨機的拿測試案例測試,但測試完後,比例會符合我們設定的比例;而按虛擬使用者人數,表示測試中的每個時間點,比例都會依據我們設定的比例;所以1和2的差異是,一個是過程中比例不會符合,而結束的時候會符合比例,而一個是過程中一直維持符合比例。

    至於3,就是指定,大家固定測試幾次後,在跳到下一項目,而項目的順序,則是依據我們的設定;至於4,就是大家依序執行…

    image

    接下來,就如小弟我所說的,小弟也只有一項測試阿XDDD

    image

    接下來,選擇網路模式,基本上,這次測試,用預設的就可以了…

    image

    再來選擇瀏覽器的模擬器,小弟本來以為有IE11了說…

    image

    接下來,如果要針對想要監控的電腦,可以在這邊增加,不過就如小弟說的,這次只是來實驗TFS的功能,所以就不詳細敘說與調整了。

    image

    最後一個步驟,設定測試的時間,預設是10分鐘,但有點長,可以自己調整想要的時間。

    image

    最後,勇敢地按下測試!!

    image

    接下來會自動配置代理伺服器。

    image

    然後,就開始進行測試的過程…

    image

    完成後,可以點選Download report來下載剛剛測試的報告。

    image

    下載完成後,再按一下View report

    image

    大家看到測試報告,因該就會由熟悉的感覺了。

    image

    如果以前測試過的報告,也可以從Load Test Manager的地方得知。

    image

    我們可以從這邊看到剛剛測試的資訊。

    image

    大致上就這樣嚕!!

    後記

    可以看得出來,現在透過Team Foundation Service越來越強大,原本很多需要我們自己配置的東西,現在透過雲端,很多東西Microsoft都幫我們準備好了,我們不需要準備太多的東西,就可以立馬上手~而這篇雖然是寫Visual Studio 2013 Preview,不過稍微測試後發現,其實也相當穩定了,未來,也期待正式版出來的時候,看能再端出怎樣的好菜=v=

    參考資料

    Visual Studio - 利用Team Foundation Service當代理伺服器進行負載測試目前的限制

    $
    0
    0

    延續前一篇,小弟我講到利用Team Foundation Service當代理伺服器來進行負載測試;後來又和Franma聊天聊到,是的,目前這個服務也還算是Preview,所以是有限制的;大家可以去底下的參考資料找到連結。

    而這個限制,基本上是每月給Team Foundation Service帳號,15000人/分的額度可以使用,簡單的說,如果你一次要壓15000人,那只能壓1min…如下圖,設定為1000人。

    image

    從計時這邊可以控制時間,這邊的分鐘數,要乘上上圖的人數,就是你所花費的額度,例如,每分鐘1000人,跑10min,就要有10000人的額度。

    image

    超過限制的話,就會出現錯誤。

    image

    我們可以從詳細的訊息這邊看到,目前還剩下多少額度等資訊。

    image

    原文如下,以小弟的案例,就不到5000人可以用了… ( 感覺好像在打online - - )

    This run exceeds the maximum allowed usage for this month. The current usage for your account for this month (including runs in progress) is 10250 and the maximum allowed usage is 15000. To learn more about usage limits and how to modify them, refer http://go.microsoft.com/fwlink/?LinkId=303976.

    基本上就是這樣,相信未來正式開始服務的時候,官方因該還會變動,不管怎樣,現在是Preview,大家就多體諒嚕~~

    參考資料


    Visual Studio - C# 前置處理器指示詞#if

    $
    0
    0

    最近看朋友用Visual Studio,發現了一個有趣的東西,那就是他在Code裡面埋了#if這類的敘述如下…( 好啦,小弟知識淺薄… )

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        public class HomeController : Controller
        {
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
    #if Test1
                return Content("1");
    #else
                return Content("2");
    #endif            
            }
    
        }
    }
    

    其實這個東西叫做C# 前置處理器指示詞( 官方是這樣稱呼的… ),這個用途其實滿有趣的,它可以讓編譯器,依據你的設定,來決定,當下要編譯那些東西。

    以上面的Code為例,大家應該就很清楚,猜也可以猜得出來,就是當為Test1時,就會編譯return Content(“1”) ( 歹勢,這邊用ASP.NET MVC為範例~ ),如果不是Test1的話,那就會編譯成return Content(“2”)。

    那Test1又代表甚麼呢??,大家其實可以從專案總管的這邊看到有一個"條件式編譯的符號",而這邊,就是可以填入我們在Code那邊設定的值。

    image

    所以如果是上面的ASP.NET MVC程式碼,我們再在專案這邊設定好後,如上圖,那我們執行出來的結果就會如下圖。而不是retunr Content(“2”)。

    image

    通常這個功能,會常用在Debug的設定、或是某些情況下的切換,老實說,小弟以前真的還沒碰過,所以這邊野人獻曝一下XDD,也順便紀錄一下,讓自己加深印象=V=

    最後,如果有興趣的人,MSDN那邊也提供了更多的寫法可以給大家參考喔!!

    ( 好啦,我就是菜…完全沒發現已經快要十年前的東西- - )

    參考資料

    感恩~2013年連任MVP成功!~再加上突破20萬大關~

    $
    0
    0

    如果說是時間飛逝,的確一點也不為過,去年到選到現在,很快地也過了一年了;而每次繳交報名表的時候,的確如前輩所說,都像是一個審核自己的年度關卡,看看這一年來做了什麼事情…

    去年一年的情況是滿特別的,去年是選拔ASP.NET的MVP,但在前公司的時候卻在弄Silverlight,回家的時候卻在看Windows Azure,沒事會被問到TFS的東西…而主力也比較偏向Windows Azure ( 因為我真的覺得很有趣阿XDD ),所以今年的時候,也逃離ASP.NET MVP的戰場( 因為前輩們競爭激烈,趕快逃出!!??? ),轉向跑去選拔Windows Azure的MVP…不過最終還好,有順利選上…呼呼…

    但好玩的是,今年反而都在搞ASP.NET MVC和TFS…Azure反而比較沒時間碰…Orz…( 所以明年又要選回ASP.NET - -? )

    回到主題,老實說,去年是個滿有趣的一年,這一年中,也很感謝各位前輩的提拔和鞭策鼓勵,那也很感謝Microsoft長官們、MVP Group、前輩們給小弟許多的機會,還有公司朋友們的熱情詢問問題相挺( 問題如雪片般地飛來… ),還有Study4.TW的大家,能無償地繼續幫台中與其他地區帶來許許多多的技術,還有在一年中,參加了很多活動,認識的技術好朋友們,另外,當然還是要感謝一下老婆大人與張小乖,能讓我有更多的心思投入到技術的領域上面,所以也在這邊謝謝大家!!

    其次,Blog也突破20大關了( 雖然小弟平常沒啥注意人數0 0… ),也謝謝大家對於小弟blog的支持,也期許未來能持續把一些新技術與東西,繼續分享給大家~~在此感謝~~

    最後,還是要來放一下開箱文~~給自己留念一下吧…

    這次收到的包裹,比較小包了( 因為沒有獎盃了XDD )。

    2013-07-14 13.31.35

    這次的獎狀,順利的轉職Windows Azure成功。

    2013-07-14 13.31.55

    內裝物,含有徽章,名牌,和萬年不變的貼紙XDDD。

    2013-07-14 13.33.15

    比較好玩的是,還有針對這個當選環的使用說明XDDD…

    2013-07-14 13.34.39

    最後的最後,還是要再一次的感謝大家和辛苦的老婆大人,也期許新的一年能繼續不斷的進步與邁進!! ( 然後要花點時間,來看一下Azure的新東西了= =+ )。

    TFS - 團隊合作的好幫手Team Room

    $
    0
    0

    在以前,我們團隊在討論事情的時候,不外乎是用幾種方式,第一,用Mail來互相溝通;第二,用MSN或是Skype把訊息丟來丟去;第三,直接殺到對方面前去討論。

    當然,這些都是公司內部的做法,也沒有甚麼好或是不好;但今天,TFS提供了一個新的功能,讓我們有多一種選擇,那就是Team Room。

    目前Team Room在TFS 2013,或是現在的Team Foundation Service,已經正式上線與提供了,如果我們登入進去後,就可以發現,多了一個Rooms的按鈕,那就是Team Room,如下圖。( 題外話,現在Member的圖示也變得比較漂亮了喔…不過為啥我預設是紅色的勒- - )

    image

    如果不想從上圖的地方點進去,也可以從下圖的地方點進去。

    image

    進去後,左邊會依據不同的專案,來區分Team Room,而右邊就是訊息列,我們可以從下方的框框中留言打字,甚至即時對談,此外,上面還有日期,可以讓我們依照日期來觀看歷史的紀錄…

    image

    不過真正強大的功能是可以記錄事件,我們可以點選右邊的管理事件連結,來管理事件。

    image

    我們可以從這邊看到,我們可以去選擇是否要記錄Build的事件,或是Code改變、Work Item更新、Code Reviews的事件。如下圖,我們可以選擇一個CI的事件來記錄。

    image

    當開啟事件後,我們就可以看到當建置的時候,或是Code Change的時候,就會被貼到上面來…( 剛好CI失敗…遮臉 )

    image

    這就是新的功能Team Room!!

    後記

    也順便在後記的地方補充一下,Team Room的用途,就是希望能把所有的事情全部攤開,很多開發的過程中,發生的問題,都被隱藏起來,而透過事件的監控,現在誰都不能說謊了QQ ( 我想老闆應該滿喜歡這功能的… ),雖然是這樣說,但其實Team Room真正的重點不是要利用此功能來監控,而是希望透過此功能,能讓團隊間遇到的問題提早浮現,所以大家不要把這個工具拿來當作批鬥的工具阿XDDD

    此外,這也很適合遠程的合作,或是每日站立會議的時候,能了解到現在遇到的問題。

    最後,在敏捷中,團隊是一體的,互相信任的,雖然小弟覺得,在台灣,這功能可能會變質,但還是要呼籲一下大家,這不是拿來監控與批鬥的工具阿XDDD

    參考資料

    TFS - 自動建置到Azure時,發生Nuget版本不合的錯誤

    $
    0
    0

    之前因為Team Foundation Service上面沒有最新的Azure SDK,所以就把CI的功能關掉,而今天心血來潮,把它重新啟動的時候,就發生了如下的錯誤,建置失敗…

    image

    錯誤訊息如下,還滿長的,但主要是在敘說,我現在的NuGet版本是1.8,已經太舊了。

    Debug | Any CPU
    4 個錯誤,0 個警告
    $/Study4/Main/Source/Study4/Study4.sln ('Other\Study4_Azure:Publish' 個目標) - 4 個錯誤,0 個警告,檢視記錄檔
    C:\a\src\Study4\Main\Source\Study4\.nuget\nuget.targets (58): The schema version of 'Microsoft.Bcl' is incompatible with version 1.8.30604.0 of NuGet. Please upgrade NuGet to the latest version from http://go.microsoft.com/fwlink/?LinkId=213942.
    C:\a\src\Study4\Main\Source\Study4\.nuget\nuget.targets (58): The schema version of 'Microsoft.Bcl.Build' is incompatible with version 1.8.30604.0 of NuGet. Please upgrade NuGet to the latest version from http://go.microsoft.com/fwlink/?LinkId=213942.
    C:\a\src\Study4\Main\Source\Study4\.nuget\nuget.targets (58): One or more errors occurred.
    C:\a\src\Study4\Main\Source\Study4\.nuget\nuget.targets (58): The command ""C:\a\src\Study4\Main\Source\Study4\.nuget\nuget.exe" install "C:\a\src\Study4\Main\Source\Study4\Webs\Study4.Web\packages.config" -source "" -o "C:\a\src\Study4\Main\Source\Study4\packages"" exited with code 1.
    $/Study4/Main/Source/Study4/Study4.sln 已編譯
    $/Study4/Main/Source/Study4/Study4.sln ('Other\Study4_Azure:Publish' 個目標) - 4 個錯誤,0 個警告,檢視記錄檔
    沒有測試結果
    沒有程式碼涵蓋範圍結果
    其他錯誤和警告
    1 個錯誤,0 個警告
    Exception Message: MSBuild error 1 has ended this build. You can find more specific information about the cause of this error in above messages. (type BuildProcessTerminateException)
    Exception Stack Trace:    at System.Activities.Statements.Throw.Execute(CodeActivityContext context)
       at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager)
       at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

    當下的第一個想法是想說,嗯,那應該又是Team Foundation Service提供的NuGet版本問題,但後來仔細想想,不對阿,Team Foundation Service理論上不太可能提供1.8這種古老版本,後來想到專案裡面重新建置會有一個Nuget.exe檔案,所以打開了檔案仔細看了一下,結果發現,原來是這個exe檔的版本太舊…Orz…

    image

    既然知道問題所在,那要處理就簡單多了,我們只要重新啟動套件還原功能就可以了;首先,我們先把.nuget整個目錄刪除掉。

    image

    然後重新再方案的地方啟用NuGet套件還原。

    image

    重新看一下版本,發現,現在已經到2.6了!!

    image

    然後再重新啟用CI,終於成功了QQ…第一次遇到這種問題啊…

    image

    SQL Server - 更改FileTable的Windows共用名稱

    $
    0
    0

    這篇也是小小的一篇,但當下,小弟竟然完全不知道該如何去改,所以這邊也記錄一下,不然到時候可能又會忘記…

    還記得前篇,我們介紹了FileTable的開啟與使用,而當時的路徑是設定為xxx\sqlexpress\FileTest,如下圖,但我們Team在開發的時候,因為有些人是使用SQL Server為開發主體,取名為sqlexpress就會讓人感覺怪怪的… ( 好啦,我龜毛啦!!~ ),所以要改一下現在的名稱。

    image

    我們期許變成如下圖…而當初改的時候,一直遇到一些小問題( 現在感覺出來真的很小 ),所以就在這邊紀錄一下。

    image

    要改的方式滿簡單的,我們只要開啟Sql Server Configuration Manager後再選擇SQL Server的服務,然後就可以去做調整,如下圖。

    image

    接下來就可以看到Windows共用名稱 ( 下圖是已經改好的 ),原本以為只要直接把Windows 共用名稱改成想要的字串就可以,但結果…

    image

    是的,會出現以下錯誤。

    只有在FILESTREAM已啟用檔案I/O存取時才能變更FILESTREAM共用。您應該停用FILESTREAM檔案I/O存取,再以新的共用名稱重新啟動。(0x80041016)。

    老實說,小弟當下讀了幾次,還真是不知道該如何解決… ( 國文老師對不起,國文沒學好… )

    image

    後來才領悟,原來是要這樣做。( 這時候有種領悟武功祕笈的感覺= = )。

    首先,要先把啟用FILESTREAM的檔案I/O存取的chickbox取消勾選,然後按下套用。

    image

    然後再把勾選勾起來,並且改Windows 共用名稱…然後再套用…

    image

    是的,就是那麼簡單那麼簡單那麼簡單那麼簡單那麼簡單那麼簡單…Orz…

    這樣名稱就可以改過來了…( 搞了半天- - )…

    Viewing all 144 articles
    Browse latest View live