利用VS2010 實作WCF and 透過ASP.NET 呼叫WCF
[前言]
今天嘗試實作WCF專案,過程當中非常不順利,爬了很多文章看了一些Sample Code,眉角真的很多(幾乎沒有簡單又能通盤說明的...不是太簡單就是太!#$%^),最後還是終於成功了...
[說明A: 建立WCF專案 for asp.net]
首先在IIS內建置好你的web site(空網站即可)!!
ps. 筆者習慣使用IIS的方式建置web相關程式.
圖a. 建議不要新增專案建立WCF服務應用程式(除非你的WCF不需要在IIS上面跑).
(光新增專案的方式已經實作過很多種,最後確定這個方式最OK的!!)
圖c. 預設新生成的WCF網站專案會有Serive.svc、Serive.cs、ISerive.cs.注意!!
這三個是一體的
*.svc 是WCF專有的. 已經不同於WS的 *.asmx
圖d. *.svc是透過CodeBehind的屬性來設定要呼叫的類別檔.
Service屬性會對應到NameSpace.Class Name
圖d. e. 透過加入新項目增加新的WCF 服務
注意!!
如果在App_Code上面Right-Click只會出現WCF資料服務但沒有WCF服務唷
圖e. (請放大看仔細囉~)
注意!!
Service1是筆者自行新增的類別(要翻寫舊的WS)
Service1也是一樣會有三個檔案
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] //有這個asp.net才能把WCF加入服務的參考
所以要 using System.ServiceModel.Activation;
接著Service1.cs一定要繼承一個介面(預設是IService1.cs內的介面)
如果不繼承介面雖然WCF專案可以完成編譯
但是筆者R0網站就無法參考到Service1.svc這個參考了
就會出現這個錯誤訊息了!!
至於實作介面算是OO的基本概念
這邊就不多作說明了!!
圖f. web.Config也要加上aspNetCompatibilityEnabled="true" 的敘述
最後完成編譯就可以讓ASP.NET 來呼叫了.
[說明B: 讓ASP.NET 呼叫 WCF]
圖4. IService介面的程式碼參考.
注意!!
[ServiceContract]、[OperationContract] 是必要的
否則別的專案(e.g. 我的ASP.NET R0) 就無法加入服務參考了
[Reference]
啟用 ASP.NET 相容性的組態