在使用 Windows Communication Foundation(WCF)服務名稱於帶有型別合約的 COM 應用程式之前,您必須先向 COM 註冊所需的屬性型別,並設定 COM 應用程式與名稱所需的綁定設定。
將所需的屬性型別註冊到 COM
使用 ServiceModel Metadata Utility Tool(Svcutil.exe)工具,從 WCF 服務中取得元資料合約。 這會產生 WCF 用戶端組合語言及用戶端應用程式設定檔的原始碼。
確保組裝中的型別標記為
ComVisible。 為此,請在 Visual Studio 專案的 AssemblyInfo.cs 檔案中新增以下屬性。[assembly: ComVisible(true)]將受管理的 WCF 用戶端編譯為強命名的組件。 這需要使用加密金鑰對進行簽署。 欲了解更多資訊,請參閱「 以強名稱簽署組件」。
使用組件註冊(Regasm.exe)工具搭配
-tlb選項,將組件中的類型註冊到 COM。使用全域組裝快取(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++ 程式碼中取得。