暫且回憶之前5篇文主要宗旨
1.初學WCF:快速上手WCF,熟悉WCF開發介面
2.建立您的第一個WCF服務(複雜版):深入瞭解合約之製作與使用時機
3.建立您的第一個WCF服務(精簡版):同上
4.在Silverlight中透過WCF&LINQ使用SQL:LINQ負責提供實體,讓SQL資料庫藉WCF提供資料,更以Silverlight為展現介面
5.部署您的WCF服務:發佈WCF
以上化繁為簡,就2、4比較
2:WCF(WCF服務程式庫)、無DB
4:WCF(有Silverlight功能的WCF服務)&Linq&Silverlight、有DB
而我的目的是建置1個可協助取回資料的單純WCF,也就是說不要採用「有Silverlight功能的WCF」這種快速建立方式,而是建立1個獨立存在,可供各端採用的服務!以下的實作概念便是採模式2但是要跟4一樣能touch後端資料庫!
以下詳列各步驟,並說明步驟緣由 :
1.新增專案→WCF服務程式庫
您也可選擇WCF服務應用程式,本文要一併呈現製作與使用服務之DLL,故採用程式庫
2.刪除Service1.vb與IService1.vb
有意義的服務命名方便日後使用,因此摒棄預設的Service1,將兩個檔案直接刪除,或是您想用重新命名的方式亦可!
piggy建議直接刪除, 作完步驟3、4後您會馬上感受到刪除的便利性!
3.刪除App.config部分內容
清空內容是因為Service1已於上一步驟捨棄,無須記錄其binding各項設定!
刪除後的cinfig檔如下所示
< ?xml version="1.0" encoding="utf-8" ?>
< configuration>
< system.web>
< compilation debug="true" />
< /system.web>
< system.serviceModel>
< services>
< /services>
< behaviors>
< /behaviors>< behaviors>
< /system.serviceModel>
< /configuration>
4.加入新增項目→WCF服務
本文新增一名為PK之WCF,專案將自動產生PX.vb與IPK.vb兩個檔案。仔細觀察App.config的變化,步驟3 highlight部分自動變成如下設定
< services>
< service behaviorConfiguration="WcfQuerySQL.PKBehavior" name="WcfQuerySQL.PK">
< endpoint address="" binding="wsHttpBinding" contract="WcfQuerySQL.IPK">
< identity>
< dns value="localhost" />
< /identity>
< /endpoint>
< endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
< host>
< baseAddresses>
< add baseAddress="http://localhost:8731/Design_Time_Addresses/WcfQuerySQL/PK/" />
< /baseAddresses>
< /host>
< /service>
< /services>
< behaviors>
< serviceBehaviors>
< behavior name="WcfQuerySQL.PKBehavior">
< serviceMetadata httpGetEnabled="true" />
< serviceDebug includeExceptionDetailInFaults="false" />
< /behavior>
< /serviceBehaviors>
< /behaviors>
5.加入新增項目→LINQ to SQL類別
此類別命名為TownClass(DB資料表為鄉鎮市行政區資料),由伺服器總管拖曳任一資料表至TownClass.dbml可視化介面,並更改序列化屬性為單向。(詳細操作畫面請參考此文步驟3&4)
請觀察TownClass.designer.vb檔案,拖曳表格完畢後,本檔案將自動產生該資料表相對應的實體,也就是為您省去mapping的動作!
6.定義服務介面(Interface),亦即IPK.vb檔案
Interface通常會定義OperationContract與DataContract,簡單來說就是方法與資料型別,這邊我們只定義方法,資料定義已交由前一步驟的TownClass。
在此定義一個獲取鄉鎮市資料的方法,透過關鍵字比對取回相符資料,code如下
< OperationContract()> _
Function GetTownByKeyword(ByVal townname As String) As List(Of TOWN)
PS:預設Sub DoWork()要記得刪除Function GetTownByKeyword(ByVal townname As String) As List(Of TOWN)
7.實作服務介面,亦即PK.vb檔案
利用IntelliSense在 Implements IPK後按下Enter自動產生必須實作的方法如下
Public Function GetTownByKeyword(ByVal townname As String) As System.Collections.Generic.List(Of TOWN) Implements IPK.GetTownByKeyword
'撰寫方法如何實作的內容
End Function
方法如何實作的內容
Dim db As New TownClassDataContext
Dim matchingTown = From townCollection In db.TOWN _Where townCollection.TOWNNAME.Contains(townname) _
Select townCollection
Return matchingTown.ToList
PS:預設Public Sub DoWork() Implements IPK.DoWork要記得刪除
8.F5
循上列步驟可成功建立一獲取SQL資料的WCF服務,無論前端是否以Silverlight開發,服務的完整建立將有利於後續各類專案的開發!
廢話:服務的部署請參考此文,這幾天找時間補齊本服務部署,深入說明部署時需要手動更改的部分和已建立的WCF有何關係,讓本文更臻完善並系統化,希望日後建立WCF有一個較佳流程可參照^-^
以下提供不負責任參考網址,與本文關係不大但寫的不錯,初學者可看看
Writing the WCF Hello World App
Host a WCF Service in IIS 7 & Windows 2008
2010.2.3繼續補齊服務部署
9.在方案中加入新增項目→ASP.NET網站
前面WCF是以服務程式庫的方式建置,最終是產製DLL,而部署服務需要的是SVC,因此需要先加入一個空白的ASP.NET來協助裝載。
10.在ASP.NET網站加入新增項目→WCF服務
服務命名為PKService,網站之App_Code資料夾會自動產生PKService.vb與IPKService.vb,網站跟目錄則是PKService.svc
11.刪除App_Code資料夾內的2個檔案
因為我們已經在步驟1-8實作服務了!不再需要這2個檔案!
12.在網站加入服務參考
也就是將WCF產製的DLL加入網站,讓Bin資料夾有DLL可參考
畫面請參考HERE步驟3
13.修改PKService.svc
服務已經實作了,所以把CodeBehind刪除,接著將Service指向WcfQuerySQL.PK
要在網站中host我們的服務,要先configure svc檔案(這邊我把Service.svc改成eval.svc)
修改前:<%@ ServiceHost Language="VB" Debug="true" Service="PKService" CodeBehind="~/App_Code/PKService.vb" %>
修改後:<%@ ServiceHost Language="VB" Debug="true" Service="WcfQuerySQL.PK" %>
★修改SVC檔案時是沒有IntelliSense可以用的,那要怎麼確保我們指向的服務是正確的?
請打開網站的web.config尋找以下資訊
由此可看出加入服務參考之時,web.config亦一併將服務端點等資訊設定好!裡面的name屬性WcfQuerySQL.PK就是要指向的服務!
12.編輯WCF組態
參考HERE步驟5
13.刪除web.config中不需要的部分
< configSections >.....到< / system.webServer >都刪掉!
14.測試
在瀏覽器中檢視PKService.svc或以Visual Studio 2008 命令提示字元測試
參考HERE步驟7
15.IIS建立名為PK_SQL的虛擬目錄
路徑請指向新網站的根目錄,參考HERE步驟8、9
以上~從無到有順利完成一個可取回後端資料庫的WCF服務!
之後再寫一篇以Silverlight運用服務的小範例,從中瞭解如何叫用服務、接收資料。
沒有留言:
張貼留言