2011-11-22 16 views
0

我有一箇舊的Web窗體,將被擴展一些Ajax功能。我已升級到.net 4,但想知道創建新服務時需要採取什麼方法。我應該去WCF或簡單的Razor/cshtml文件創建服務?

我沒有寫作WCF服務太多的經驗,似乎這樣更簡單的只寫使用簡單文件CSHTML這樣的服務:

@{  
    var db = Database.Open("MyConnectionString); 
    var data = db.Query("SELECT * FROM MyTable WHERE Col1 = @0", '123'); 
    Json.Write(new { results=data}, Response.Output); 
} 

什麼是使用這種策略的陷阱相比創建一個wcf服務?

感謝所有幫助

Larsi

回答

1

基於對CodeCaster您的意見,我想你混淆Web服務和Web方法的概念。如果你所做的只是將Ajax添加到你的應用程序中,那麼你需要web方法,它是返回json的操作方法。而且,由於您使用的是網頁,因此您的方法非常有效。

+0

感謝您的意見,是的,你對我的理解混淆概念,我想我也在比較蘋果和橙子。 – Larsi

0

使用WCF,你可以這樣做:

[OperationContract] 
public UserNow GetCurrentUser() 
{ 
    string UserName = Membership.GetUser().UserName; 
    string UserToView = Request.Params["UserToView"]; 
    //do a bunch of things. 
    return UserNow; 
} 

的優勢是什麼?

  • 它是強類型的(你不能返回一個字符串或布爾或新的FooBar的()或只是什麼都沒有,而你可以Response.Write全部或者你喜歡什麼)產生
  • 一個WSDL,哪些客戶端可消耗那麼他們就會知道他們可以執行哪些操作以及哪些數據類型被髮送
  • 使用WCF,您可以輕鬆地添加另一個結合,以支持客戶的其他範圍(basicHttp和wsHttp爲web服務,netTcp與其他更有效的溝通客戶用.NET編寫的),而不必更改任何代碼的

而且可能還有很多我會忘記的其他東西。

+0

嗨!謝謝回答。是的,同意所有的優點,但在我的情況下,上下文是一個現有的網絡應用程序,沒有新的客戶端 - 我只想對ajax風格的應用程序做一些快速更改。我更新了示例以更好地展示非強類型方法的優勢。 – Larsi

+0

@Larsi與Mystere Man的答案一樣,在這種情況下,考慮到條件,你的方法是完全有效的。 – CodeCaster

0

一個在其他答覆沒有提及考慮的是Json.Write的性能。它非常適用於小型的記錄集W/A數列,但我注意到,這是明顯慢W/即使僅有〜70次的記錄和10列。在Web應用程序的環境中,這對於「Ajaxifying」是非常重要的,在這種情況下,您通常會嘗試使應用程序對用戶交互更加敏感。在這些情況下,我通常會使用Json.Write來獲得概念驗證的工作,但最終會返回並修改剃鬚刀頁面以循環返回的記錄並構建帶有StringBuilder的JSON字符串並編寫輸出。

我不知道WCF的性能,但如果它比循環一個字符串構建器更快,那麼您可以將它添加到上面的好處列表中(以權衡設置它的複雜性)。

+0

我也看到它很慢。不知道這是否是我的電腦上的問題。感謝您的意見。 – Larsi