共用方式為


如何註冊並設定服務標識符

在使用 Windows Communication Foundation(WCF)服務名稱於帶有型別合約的 COM 應用程式之前,您必須先向 COM 註冊所需的屬性型別,並設定 COM 應用程式與名稱所需的綁定設定。

將所需的屬性型別註冊到 COM

  1. 使用 ServiceModel Metadata Utility Tool(Svcutil.exe)工具,從 WCF 服務中取得元資料合約。 這會產生 WCF 用戶端組合語言及用戶端應用程式設定檔的原始碼。

  2. 確保組裝中的型別標記為 ComVisible。 為此,請在 Visual Studio 專案的 AssemblyInfo.cs 檔案中新增以下屬性。

    [assembly: ComVisible(true)]
    
  3. 將受管理的 WCF 用戶端編譯為強命名的組件。 這需要使用加密金鑰對進行簽署。 欲了解更多資訊,請參閱「 以強名稱簽署組件」。

  4. 使用組件註冊(Regasm.exe)工具搭配 -tlb 選項,將組件中的類型註冊到 COM。

  5. 使用全域組裝快取(Gacutil.exe)工具將組裝加入全域組裝快取。

    備註

    簽署組件並將其加入全域組件快取是可選步驟,但它們能簡化執行時從正確位置載入組件的過程。

請以所需的綁定配置配置 COM 應用程式與名稱

  • 將由 ServiceModel Metadata Utility Tool (Svcutil.exe) 產生的綁定定義,置於用戶端應用程式的設定檔中。 例如,對於名為 CallCenterClient.exe的 Visual Basic 6.0 執行檔,設定應放在與執行檔相同的目錄中,名為 CallCenterConfig.exe.config 的檔案中。 用戶端應用程式現在可以使用這個名稱。 請注意,若使用 WCF 提供的標準綁定類型,則不需裝訂配置。

    註冊的類型如下。

    using System.ServiceModel;
    
    [ServiceContract]
    public interface IMathService
    {
        [OperationContract]
        public int Add(int x, int y);
        [OperationContract]
        public int Subtract(int x, int y);
    }
    

    應用程式會使用 wsHttpBinding 綁定方式公開。 針對給定的類型和應用配置,使用以下範例標識字串。

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1
    

    service4:address=http://localhost/MathService, binding=wsHttpBinding, bindingConfiguration=Binding1, contract={36ADAD5A-A944-4d5c-9B7C-967E4F00A090}
    

    在為 Visual Basic 6.0 應用程式加入包含 IMathService 類型的組件參考後,你可以使用其中任一個類名字串,如下範例程式碼所示。

    Dim mathProxy As IMathService
    Dim result As Integer
    
    Set mathProxy = GetObject( _
            "service4:address=http://localhost/MathService, _
            binding=wsHttpBinding, _
            bindingConfiguration=Binding1")
    
    result = mathProxy.Add(3, 5)
    

    在此範例中,綁定設定 Binding1 的定義儲存在用戶端應用程式適當命名的設定檔中,例如 vb6appname.exe.config

    備註

    你可以在 C#、C++ 或其他任何 .NET 語言應用程式中使用類似的程式碼。

    備註

    若名稱格式錯誤或服務無法使用,呼叫 GetObject 時會回傳「語法無效」錯誤。 如果你收到這個錯誤,請確認你使用的名稱正確且服務是否可用。

    雖然本主題聚焦於使用 Visual Basic 6.0 程式碼中的服務名稱,但你也可以使用其他語言的服務名稱。 從C++程式碼中使用名稱時,應以「no_namespace named_guids raw_interfaces_only」匯入Svcutil.exe產生的組件,如以下程式碼所示。

    #import "ComTestProxy.tlb" no_namespace named_guids
    

    這會修改匯入的介面定義,使所有方法回傳一個 HResult。 其他回傳值則會轉換成 out 參數。 方法的整體執行方式保持不變。 這讓你在呼叫代理方法時,能判斷異常的原因。 此功能僅能從 C++ 程式碼中取得。

另請參閱