Windows Communication Foundation 新手教學課程的疑難排解
本文針對您遵循 Windows Communication Foundation 應用程式新手教學課程的步驟操作時,可能遇到的最常見問題和錯誤,提供解決方案。
常見問題
我在硬碟中找不到專案檔。
Visual Studio 會將專案檔儲存在 C:\Users\<user name>\source\repos。
我找不到 Svcutil.exe 產生的 App.config 檔案。
根據預設,Visual Studio 的 [新增現有項目] 視窗只會顯示具有下列副檔名的檔案:
- .cs
- .resx
- .settings
- .xsd
- .wsdl
若要顯示所有檔案類型,請在 [新增現有專案] 視窗右下角的下拉式清單中選取 [所有檔案 (*.*)]。
常見錯誤
編譯服務應用程式
在 'GettingStartedHost.Module1' 中找不到錯誤 BC30420 'Sub Main'。
Visual Basic 應用程式的進入點不正確。 請執行下列變更:
- 在 [方案總管] 視窗中,選取 [GettingStartedHost] 資料夾,然後從捷徑功能表中選取 [屬性]。 a. 在 [GettingStartedHost] 視窗,從清單中為 [啟動物件] 選取 [Service.Program] (或特定應用程式的進入點)。 b. 從主功能表中,選取 [檔案] > [全部儲存]。
執行服務應用程式
HTTP 無法註冊 URL 'http://+:8000/GettingStarted/CalculatorService'。 您的處理程序沒有足夠的存取權可存取此命名空間。
若要獲得適當的存取權,請使用系統管理權限啟動程序來裝載 Windows Communication Foundation (WCF) 服務:
- 如為 Visual Studio:請在 [開始] 功能表中選取 Visual Studio 程式,然後從捷徑功能表中選取 [更多] > [以系統管理員身分執行]。
- 如為主控台視窗:請在 [開始] 功能表中選取 [命令提示字元],然後從捷徑功能表中選取 [更多] > [以系統管理員身分執行]。
- 如為 Windows Explorer:請選取可執行檔,然後從捷徑功能表中選取 [以系統管理員身分執行]。
編譯用戶端應用程式
'CalculatorClient' 不包含 '<method name>' 的定義,也找不到擴充方法 '<method name>' 來接受型別 'CalculatorClient' 的第一個引數 (您是否遺漏 using 指示詞或組件參考?)
只有標記 ServiceOperationAttribute
屬性方法會公開。 如果您在 ICalculator
介面省略方法的 ServiceOperationAttribute
屬性,就會在編譯期間收到此錯誤訊息。
找不到型別或命名空間名稱 'CalculatorClient' (您是否遺漏 using 指示詞或組件參考?)
如果您在使用「Svcutil.exe」工具產生「generatedProxy.cs」(或「generatedProxy.vb」) 檔案時,未將它們新增至用戶端專案,就會收到此錯誤。
執行用戶端應用程式
未處理的例外狀況:System.ServiceModel.EndpointNotFoundException:無法連線到 'http://localhost:8000/GettingStarted/CalculatorService'。 TCP 錯誤碼 10061: 無法連線,因為目標電腦主動拒絕連線。
如果執行用戶端應用程式時沒有先啟動服務,就會發生這個錯誤。 請先執行主應用程式以啟動服務,然後再執行用戶端應用程式。
使用 Svcutil.exe 工具
'Svcutil' 並未經辨識為內部或外部命令、可執行程式或批次檔案。
「Svcutil.exe」必須位於系統路徑。 最簡單的解決方案是使用 Visual Studio 命令提示字元。 從 [開始] 功能表,選取 [Visual Studio 版本<>] 目錄,然後選取 [VS 版本<> 開發人員命令提示字元]。 此命令提示字元會針對 Visual Studio 傳遞的所有工具,將系統路徑設為正確位置。
執行服務和用戶端應用程式
System.ServiceModel.Security.SecurityNegotiationException:目標 'http://localhost:8000/GettingStarted/CalculatorService' 與 'http://localhost:8000/GettingStarted/CalculatorService' 進行 SOAP 安全性交涉失敗
如果電腦已加入網域卻沒有網路連接,就會發生這個錯誤。 請將您的電腦連接至網路,或是將服務與用戶端兩者的安全性都關閉。
若要關閉安全性:
針對服務,請將建立
WSHttpBinding
的程式碼取代為下列程式碼:// Step 3: Add a service endpoint. selfhost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(SecurityMode.None), "CalculatorService");
針對用戶端,請在組態檔中,將 <binding> 元素中的 <security> 元素更新如下:
<binding name="WSHttpBinding_ICalculator"> <security mode="None" /> </binding>