建立您的第一個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一起作)

沒有留言: