利用VS2010 實作WCF and 透過ASP.NET 呼叫WCF

利用VS2010 實作WCF and 透過ASP.NET 呼叫WCF

[前言]

今天嘗試實作WCF專案,過程當中非常不順利,爬了很多文章看了一些Sample Code,眉角真的很多(幾乎沒有簡單又能通盤說明的...不是太簡單就是太!#$%^),最後還是終於成功了...

[說明A: 建立WCF專案 for asp.net]

首先在IIS內建置好你的web site(空網站即可)!!
ps. 筆者習慣使用IIS的方式建置web相關程式.

image
圖a. 建議不要新增專案建立WCF服務應用程式(除非你的WCF不需要在IIS上面跑). 
(光新增專案的方式已經實作過很多種,最後確定這個方式最OK的!!)

image
圖b. 選擇IIS的web site並選WCF專案範本.

image
圖c. 預設新生成的WCF網站專案會有Serive.svc、Serive.cs、ISerive.cs.

注意!!
這三個是一體的
*.svc 是WCF專有的. 已經不同於WS的 *.asmx

image
圖d. *.svc是透過CodeBehind的屬性來設定要呼叫的類別檔.

Service屬性會對應到NameSpace.Class Name


image
image
圖d. e. 透過加入新項目增加新的WCF 服務

注意!!
如果在App_Code上面Right-Click只會出現WCF資料服務但沒有WCF服務唷


image
圖e. (請放大看仔細囉~)

注意!!
Service1是筆者自行新增的類別(要翻寫舊的WS)
Service1也是一樣會有三個檔案
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]       //有這個asp.net才能把WCF加入服務的參考
所以要 using System.ServiceModel.Activation;

接著Service1.cs一定要繼承一個介面(預設是IService1.cs內的介面)
如果不繼承介面雖然WCF專案可以完成編譯
但是筆者R0網站就無法參考到Service1.svc這個參考了
就會出現這個錯誤訊息了!!
image

至於實作介面算是OO的基本概念
這邊就不多作說明了!!

image
圖f. web.Config也要加上aspNetCompatibilityEnabled="true" 的敘述


最後完成編譯就可以讓ASP.NET 來呼叫了.

 

 

[說明B: 讓ASP.NET 呼叫 WCF]

image
圖1. 點選網站並加入服務參考


image
圖2. 輸入你要的命名空間(可以用 . 來隔開...e.g. R0.aa1)

根據命名空間會產生對應的資料夾

image
圖3. 呼叫WCF的類別(中繼檔會把類別名稱作修改變成Service1Client這部分跟WS比較不一樣)

image
圖4. IService介面的程式碼參考.

注意!!
[ServiceContract]、[OperationContract] 是必要的
否則別的專案(e.g. 我的ASP.NET R0) 就無法加入服務參考了

 

image
圖5. 中繼檔程式碼參考.

 

[Reference]

[WCF] 建立 WCF 服務 (單機版)

漫畫式學習WCF-01:利用VS 2010快速建立一個WCF程式

啟用 ASP.NET 相容性的組態