WebApi 這兩天被dudu老大炒的老火了,看來我也需要加把柴了,呵呵。
NLite WebApi 是基於Ndf的服務分發器引擎,並借助Asp.net 的http原生態無狀態協議的基礎上搭建起來的
,NLite Web api 完全無侵入性,不繼承任何基類,只需要簡單的配置即可把業務邏輯自動發不成NLite Web Api 服務, 簡單易用,不廢話,上過程!
服務端Nlite Web API的實現
需要准備的工具:Visual Studio 2010, NuGet(這兩天現學了Nuget 包的制作,雖然去年簡單學習並制作了
NLite的包,不過早忘光了,看了dudu老大的WebApi介紹,感覺落伍了,抓緊進行了惡補,總算制作了一個NLite
Web Api的Nuget 包了呵呵,在這里要多謝dudu了)
1. 新建一個空的ASP.NET Web Application項目。

2. 刪除默認的Global文件(還沒完全學會通過Nuget對Global文件的Merge處理,暫時先把原有的刪掉,然后通過
Nuget用新的內容來替換它)
3. 通過NuGet 控制台添加NLite Web API的引用:Install-Package NLite.WebApi
4. 通過Nuget,已經自動的把系統配置完畢,並且內置了幾個Demo,還有Jquery客戶端的調用示例(也是WebApi的
測試工具簡單易用又方便,試試就知道了,呵呵),下面是自動生成的代碼和Demo例子
Global文件的配置代碼:

Service文件夾(即Asp.net WebApi 中的Controllers文件夾)以及Service 類(相當於Controller,如HelloService
,相當於HelloController,服務名:hello)

HelloService 的代碼(HelloService的類上添加了Component標簽,是讓DI容器自動注冊用的)

5. F5 運行,並輸入(系統自動調用HelloService的Index方法,參數name的值為"netcasewqs"

備注:
code 是服務器返回的狀態碼,code=1是成功,反之失敗,data 的內容就是服務返回的真正結果"Hello netcasewqs"
剛才是通過Url直接來訪問WebApi,現在通過系統自帶的工具來測試
1. 在瀏覽器中鍵入http://localhost:2955/metadata/index.htm,系統會自動的把所有的Service(Controller)枚舉出來,如圖

2. 選擇一個Service(Controller)HelloService,系統自動的把該服務下所有符合協議的方法都枚舉出來,如圖

3. 選擇一個方法,系統會自動的彈出一個表單

4.鍵入參數並單擊“點擊查看運行結果”按鈕
JQuery調用示例代碼(獲取所有的服務列表代碼)
1.客戶端WebApi測試工具的前端代碼是靜態網頁html+Jquery,后端的MetadataService如下:
[Component] public class MetadataService { IServiceDescriptorManager ServiceDescriptorManager; public MetadataService(IServiceDescriptorManager serviceDescriptorManager) { ServiceDescriptorManager = serviceDescriptorManager; } public class ServiceModel { public string name; public string desc; } public ServiceModel[] Index() { return ServiceDescriptorManager.ServiceDescriptors .Select(s => new ServiceModel { name = s.ServiceName, desc = s.Description }).ToArray(); } public class OperationModel { public string name; public string desc; } public class ParameterModel { public string name; public string type; public string desc; } public OperationModel[] Actions(string serviceName) { var sd = ServiceDescriptorManager.GetServiceDescriptor(serviceName); if (sd == null) return new OperationModel[0]; return sd.Select(p => new OperationModel { name = p.OperationName, desc = p.Description }).ToArray(); } public ParameterModel[] Args(string service, string action) { var sd = ServiceDescriptorManager.GetServiceDescriptor(service); if (sd == null) return new ParameterModel[0]; var op = sd[action]; if (op == null) return new ParameterModel[0]; return op.Method.GetParameters() .Select(p => new ParameterModel { name = p.Name, type = p.ParameterType.FullName, desc = GetParameterDescription(p) }) .ToArray(); } private static string GetParameterDescription(ParameterInfo p) { var descAttr = p.GetAttribute<DescriptionAttribute>(true); return descAttr != null ? descAttr.Description : null; } }
2. WebApi客戶端工具-服務列表頁面 Index.htm,其它的頁面略
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Api 服務列表</title> <link href="Style.css" rel="stylesheet" type="text/css" /> <script src="JScript.js" type="text/javascript"></script> <script src="../Scripts/jquery-1.4.1.js" type="text/javascript"></script> <script type="text/javascript" language="javascript"> $(document).ready(function () { //獲得站點路徑(例如:http://www.baidu.com) var host = GetHost(); var url = host + "/api/Metadata/Index.aspx"; $.post(url, function (result) { if (result.code == 1) { $.each(result.data, function (i, field) { var content_li = "<li>"; var content_a = "<a href='actions.htm?op=" + field.name + "'>" + FirstToUpper(field.name) + "</a>"; var content_span = ""; if (field.desc != null) { content_span = "<span id='content_span'><br/>" + field.desc + "</span>"; } var content_end_li = "</li>"; var content = content_li + content_a + content_span + content_end_li; $("ul").append(content); }); } else { alert(result.message); } }); }); </script> </head> <body> <div id="content"> <p class="heading1"> 服務列表</p> <br /> <ul> </ul> </div> </body> </html>
示例代碼下載:
http://files.cnblogs.com/netcasewqs/NdfWebApiDemo.zip
總結:Asp.net WebApi 非常強大,吸收了Asp.net mvc很多精髓的設計思想,NLite WebApi 是構建在Ndf的服務分發器的基礎上進行構造的,Ndf服務器分發器的一個宗旨是:業務邏輯的高內聚,高復用性,高松耦合和便捷的可測試性為宗旨,支持嵌入式和分布式部署,詳情見官網解釋http://ndf.codeplex.com/
