2013年6月21日 星期五

Web API與Entity Framework序列化問題

ASP.NET Web API專案使用EntityFramework載入Master/Details資料遇到ASP.NET Web API序列化錯誤:

image

重現問題:

image

image

image

image

image

image

image

image

image

執行時,顯示Proxy物件序列化錯誤

image

解法,關掉Proxy建立動作

image

搞定!!

image

我們可以使用   [IgnoreDataMember]控制某些成員不做序列化:

image

不序列化Orders

image

2013年6月19日 星期三

測試ASP.NET Web API簡易工具

 

New MVC 4 Project

image

image

  • NuGet

image

  • Search webapitest,install

image

  • 修改Api.cshtml
@Html.DisplayForModel("TestClientDialogs")
@section Scripts {
    <link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
    @Html.DisplayForModel("TestClientReferences")
}

image

  • CTRL+F5

image

  • 測試get

image

  • 多一個Test API button

image

  • test

image

  • result

image

 

 

2013年6月17日 星期一

Tuple in .NET

  • Tuple是一個資料結構,含有序的項目,順序由建立Tuple時決定
  • Tuple文件 http://msdn.microsoft.com/en-us/library/system.tuple.aspx
  • Tuple中的項目(Item)型別(Type)可以不同
  • 固定大小,無法新增、移除項目
  • .NET Framework 4始支援
  • 從functional programming引進而來
  • Tuple中的項目(Item)都是唯讀的(Readonly)
  • 缺點,程式不易讀,Tuple中的項目會自動命為Item1、Item2….無法知道到底存什麼
  • 用於
    • 表示一組資料,如資料庫記錄
    • 從method回傳多個值,不需使用out參數
    • 使用一個參數傳遞多個值到method

Demo1

可以使用建構函式來建立,語法煩瑣,可以使用Tuple.Create方法建立,利用ItemX取出值。

private static void demo1( ) {
      var n = new Tuple<int , int >( 10 , 20 );
      //會自動根據定義產生Item1、Item2屬性
      Console.WriteLine( n.Item1 );
      Console.WriteLine( n.Item2 );
      //較簡單
      var n2 = Tuple.Create<int , int>( 10 , 20 );
      Console.WriteLine( n2.Item1 );
      Console.WriteLine( n2.Item2 );
    }

Demo2

可以當參數傳入mymethod

private static void demo2( ) {
    //當參數傳入mymethod
    var n = new Tuple<int , int>( 10 , 20 );
    Console.WriteLine( mymethod(n ) );
  }
  private static int mymethod(Tuple<int , int > t ) {
    return t.Item1 + t.Item2;
  }

Demo3

可以當作方法回傳值

private static void demo3( ) {
      Console.WriteLine( mymethod2( ).Item1 );
      Console.WriteLine( mymethod2( ).Item2);
    }

    private static Tuple<int , string> mymethod2( ) {
      return Tuple.Create<int,string>(1,"mary");
    }

Demo4

可以建立1~7個項目 tuple,超過8個以上可以使用Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>物件的來建立,再透過Rest屬性存取TRest中項目的值。定義8個項目:

private static void demo4( ) {

var t8 = new Tuple<int , int , int , int , int , int , int , Tuple<int>>( 1 , 2 , 3 , 4 , 5 , 6 , 7 , Tuple.Create(8) );

Console.WriteLine( t8.Rest.Item1); //8

}

Demo5

定義9個項目:

private static void demo5( ) {
      var t9 = new Tuple<int , int , int , int , int , int , int , Tuple<int , int>>( 1 , 2 , 3 , 4 , 5 , 6 , 7 ,
        new Tuple<int,int>(8,9)
        );
      Console.WriteLine( t9.Rest.Item1);  //8
      Console.WriteLine( t9.Rest.Item2 ); //9
    }

2013年6月13日 星期四

Publish ASP.NET MVC 4 Web App to Windows Azure

 

使用Visual Studio 2012先建立一個ASP.NET MVC 4 - Internet範本專案測試部署

image

  • 設定DB

image

  • 設定登入db的帳號與密碼

image

  • 開放ip存取

image

image

複製DB連接字串

image

  • 在VisualS Studio 2012,設release mode

image

  • 修改Web.Release.config,加connectionString區段,connectionString貼上copy來的連接字串,並正確設定密碼

image

image

 

image

image

  • 回到Visuals Studio 2012 , publish,下載發佈檔

image

  • 匯入

image

image

  • publish

image

  • 發行成功,啟動browser

image

  • 試著註冊

image

  • 註冊成功並登入

image

image

  • 查詢DB資料

image

Publish ASP.NET MVC 4 App to IIS8

部署ASP.NET MVC 4 Web Application to IIS 8
Tools: Visual Studio 2012

第一步要以系統管理員身份執行Visual Studio 2012

image

Create a New Web Application to deploy

image

image

預設Internet 範本使用Entity Framework 5.0 Code First方式建立會員資料庫,我希望部署到Server 時,資料庫改用SQL Express。

預設Web.config檔案內,含連接字串如下:

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

在Web.Release.config檔案加入:

<connectionStrings>
  <add name="DefaultConnection"
    connectionString="Data Source=.\sqlexpress;Initial Catalog=demodb;Integrated Security=True"
    xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

image

切換到Relase Mode
image

Build Solution

Publish

image

image

image

publish到本機IIS試看看

image

image

Preview 沒問題,就按下Publish

image

成功之後,會自動啟動Browser,顯示網站首頁

image

檢視IIS wwwroot下網站的程式檔案都部署上來了,web.config檔案內包含的連接字串是Release版的,連到sqlexpress

image

試著註冊會員

image

發生錯誤,權限不足

image

檢視IIS MyMVCApp執行在DefaultAppPool

image

DefaultAppPool目前使用ApplocationPoolIdentity身份執行

image

使用SQL Server Management Studio連接到SQLExpress

image

新增login

image

設定登入名稱

image

授權dbcreator

image

回到Browser,就可以註冊了

image

輸入帳號密碼

image

網站便可登入

image

使用SQL Server Management Studio檢視DB已建立,UserProfile資料表中,含一筆資料

image

總網頁瀏覽量