一:緩存服務類型與方法
客戶端請求的時候
為了方便的知道請求的類型與類型所包含的方法
我們把服務類型和方法緩存到靜態字典中了
代碼如下
二:托管HTTP請求
在webconfig中增加module以托管請求
托管請求對應的類的代碼如下
通過這行代碼
Type serviceType = WCFRouteTable.GetWCFType(relativeAddress);
用戶只要請求如下路徑
http://localhost/RTMDemo.Host/RTMDemo.Host.WCF.MenuService
就會得到MenuService的類型
然后把服務類型傳給指定的處理程序
三:處理請求
在WCFHandler類中最重要的莫過於
處理請求的方法
代碼如下
注意:首先說這段代碼還有很大的優化空間;也未經過嚴格的測試;但思路基本就是這樣的
處理請求主要做了如下幾步工作:
1.
先根據請求POST上來的信息得到准備執行的方法
var MethodKey = context.Request["MethodKey"];
var minfo = WCFRouteTable.GetMethodInfo(MethodKey);
MethodInvoker稍后再講
2.
按順序取出了方法的參數,並用DataContractJsonSerializer反序列化成對象
方法參數都是用JSON字符串傳遞的
3.
通過反射創建了服務的實例
然后調用該實例的方法
得到方法的返回值,並序列化成JSON字符串
4.
把返回值以JSON的形式輸出給客戶端
四:其他
1.
MethodInvoker是用的老趙的類;具體是哪篇文章,我已經找不到了。
2.
服務類和數據訪問的類沒有什么特殊的
我這里只公布一個服務的類
MenuDa就是數據訪問類了
很普通,就不在公布代碼了
3.
完成這些工作之后
我們只要在客戶端構造好表單
然后把表單POST到指定的路徑
就能完成服務的訪問了!
---------------------------------------------------------------
喜歡的話~請大家推薦我的文章
謝謝~
我真的很需要你們的支持