建立您的第一個WCF服務(跟著piggy一起作)

寫在前面:相較於前文piggy在本文將提供最精簡的步驟,盡量保持專案初始的配置(例如直接使用WCF專案預設提供的Service.vb和IService.vb檔案)

情境描述:建立一個簡單的服務,服務提供的資料具備3種屬性,而服務提供的方法則有遞交、取得、刪除3種方法。
a)屬性命名:Id、Sumbitter、Comments
b)方法命名:SubmitEval、GetEvals、RemoveEval

1.新增專案

建立名為EvalServiceLibrary2的WCF服務程式庫


專案的預設配置

2.定義服務(本步驟在IService1.vb進行)
a)ServiceContract
將預設的2個方法刪除(GetData、GetDataUsingDataContract),加入我們設計的3種方法(SubmitEval、GetEvals、RemoveEval)

 原始ServiceContract


加入3個新方法的ServiceContract

上圖的Eval型別錯誤不用擔心,那是因為我們還沒規範出自定義的Eval型別!
步驟a已完成服務的method,接下來我們要定義DataContract,明確規範自定義的Eval型別!
b)DataContract

原始DataContract


在DataContract規範自定義之Eval Class

3.實作服務(本步驟在Service1.vb進行)
將預設2個方法的實作部分刪除,利用IntelliSense在Implements IService1後面按下Enter,VS2008將自動加入需要實作的code片段,這些片段是根據步驟2我們定義的3種方法所產生。

 原始Service1.vb


根據步驟2 Contract自動產生的新Service1.vb

繼續撰寫3個方法(IntelliSense自動產生的)的內容,完成實作的部分,此時錯誤清單已經沒有任何錯誤!WCF服務已建置成功!

實作內容

3.F5進行測試(測試請參考前一篇步驟14&15)

4.存檔

建立您的第一個WCF服務(跟著PluralSight的Aaron Skonnard一起作)

1.開啟VSTS2008,專案→新增專案→WCF→WCF服務程式庫→輸入名稱EvalServiceLibrary

2.刪除預設的IService1.vb與Service1.vb

3.對專案EvalServiceLibrary按右鍵→加入→類別→輸入名稱Eval

4.在Eval.vb輸入程式碼
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Runtime.Serialization

Namespace EvalServiceLibrary
    < DataContract() > _
    Public Class Eval
        < DataMember() > _
        Public Id As String
        < DataMember() > _
        Public Submitter As String
        < DataMember() > _
        Public Comments As String
    End Class
End Namespace


5.同步驟3再新增1個類別IEvalService.vb,貼上程式碼如下
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Runtime.Serialization

Namespace EvalServiceLibrary
        < ServiceContract() > _
    Public Interface IEvalService
        < OperationContract() > _
        Sub SubmitEval(ByVal eval As Eval)
       
< OperationContract() > _
        Function GetEvals() As List(Of Eval)
       
< OperationContract() > _
        Sub RemoveEval(ByVal id As String)
    End Interface
End Namespace
 

 6.再次新增新類別EvalService.vb並輸入下列程式碼
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text

Namespace EvalServiceLibrary
    Public Class EvalService
    End Class
End Namespace

7.在 Public Class EvalService後面輸入:Implements .NET 的IntelliSense會自動出現各種namespace供你選取,選擇IEvalService後頁面會自動放置你需要實做的各類Interface,也就是步驟5我們所設計的3種[OperationContract]


8. 承前,在Public Class EvalService : Implements IEvalService前輸入
完整程式碼如下highlight
Namespace EvalServiceLibrary
    < ServiceBehavior(InstanceContextMode:=InstanceContextMode.Single) > _
    Public Class EvalService : Implements IEvalService

9.把EvalService.vb的三個method完成後進行偵錯,完整程式碼如下highlight
Public Class EvalService : Implements IEvalService

        Dim evals As New List(Of Eval)()
        Public Function GetEvals() As System.Collections.Generic.List(Of Eval) Implements IEvalService.GetEvals
            Return evals
        End Function

        Public Sub RemoveEval(ByVal id As String) Implements IEvalService.RemoveEval
            evals.Remove(evals.Find(Function(e) e.Id.Equals(id)))
        End Sub

        Public Sub SubmitEval(ByVal eval As Eval) Implements IEvalService.SubmitEval
            eval.Id = Guid.NewGuid().ToString
            evals.Add(eval)
        End Sub
    End Class

10.對App.config按右鍵選擇「編輯WCF組態」


11.點選服務EvalServiceLibrary.Service1,右方視窗出現服務的一般屬性

12.承上繼續修改Name屬性,瀏覽至方案資料夾下的bin\Debug\EvalServiceLibrary.dll,指向型別名稱EvalServiceLibrary.EvalServiceLibrary.EvalService的服務類型

13. 在左側視窗展開服務的端點(endpoint),開始修改端點內容的Contract屬性,一樣瀏覽至bin\Debug\EvalServiceLibrary.dll,指向型別名稱EvalServiceLibrary.EvalServiceLibrary.IEvalService的合約類型

第2個端點則不用修改,回到最上層的服務觀看所有服務端點,可以發現第2個的Contract是「IMetadataExchange」,它是負責runtime時取回服務的metadata

14.存檔後按下F5,出現「WCF測試用戶端」視窗

同時Windows工具列右下方會出現1個可愛的WCF服務主機icon,滑鼠double-click開啟WCF服務主機可以察看服務的address等metadata

15.開始透過WCF測試用戶端進行測試
a)SubmitEval測試
  • double-click視窗左側的SubmitEval,於右方開啟測試窗格
  • 在Comment與Submitter輸入任意字串
  • 按下叫用(Invoke)完成測試
  • 重複上述步驟做3次測試
b)GetEvals測試
  • double-click視窗左側的GetEval,於右方開啟測試窗格
  • 按下叫用 ,可以看到SumbitEval送出的3筆資料
c)RemoveEval測試
  • 挑選GetEval中列出的其中一筆資料,複製其Id
  • double-click視窗左側的RemoveEval,於右方開啟測試窗格
  • 將複製的Id貼入進行測試(貼入前記得移掉雙引號)
  • 按下叫用,完成測試
  • 再回去GetEvals並重新叫用,發現被移除1筆資料,只剩下2筆
16.結束

★本篇依據Windows Communication Foundation 初學者指南的第一段影片實做,重點是提供詳細中文步驟,嫌步驟太繁雜or想知道操作意義者,請參考piggy精簡後的建立您的第一個WCF服務(跟著piggy一起作)!