2009-08-20 17 views
14

我在同一個解決方案中有一個WCF測試服務和一個測試客戶端。該服務被配置爲在本地主機上運行(即,「http://localhost:8731/Design_Time_Addresses/MyService/Service」)我運行客戶端應用程序並正確調用服務並獲取正確答案。我通過日誌進行了驗證,確定它運行的是我的機器本地的服務。 但是,運行客戶端時,我無法調試到該服務。 WCF應該只允許單步執行,但服務上沒有斷點,並且加入服務調用也不起作用。有沒有人見過這個?WCF無法再進入本地託管的服務 - 爲什麼不呢?

我已經檢查了所有顯而易見的東西,比如「正在生成的PDB文件?」 - 是的。如果我自己運行服務項目,然後用一些測試客戶端點擊它,斷點會正確命中。所以在服務上調試工作。我甚至可以明確地「附加到遠程進程」並以這種方式調試服務。但是WCF不會自動從客戶端步入服務。

+0

您如何託管您的WCF服務? Windows服務? IIS? – 2009-08-20 16:08:29

+0

不,它通過Visual Studio在同一解決方案中本地運行。 IE,http:// localhost:8731/Design_Time_Addresses/MyService/Service – tavistmorph 2009-08-20 16:11:42

+0

確保您在設置代理時使用正確的端點。我花了一個小時才意識到我正在指向我沒有開發的端點。 – Trevor 2014-02-05 02:00:56

回答

3

您是否在Visual Studio中使用自動WCF服務託管功能?您可以通過打開WCF服務項目的項目屬性並導航到WCF選項選項卡來進行檢查。 是否在調試同一解決方案中的其他項目時啓動WCF服務主機複選框已選中?如果是這樣,那麼這就解釋了這個問題。

發生什麼事情是,當您運行客戶端時,會創建一個單獨的進程來自動託管您的WCF服務。因爲它是一個獨立的過程,所以在調試客戶端時,您將無法「進入」它。您必須運行兩個獨立的調試會話,一個用於您的服務,另一個用於您的客戶端。

一個簡單的方法是在服務的啓動邏輯中調用System.Diagnostics.Debugger.Break()。當您的服務由WCF服務主機自動啓動時,系統會提示您進行調試,從而允許您爲其調試會話打開第二個Visual Studio實例。

+0

我認爲這隻適用於WCF服務是自託管的,這意味着不在IIS內部,VS開發服務器或WCF服務主機。或者更簡單地說,OP所要求的內容通常是在WCF項目的解決方案中「開箱即用」 - 您可以踏入其中。 – msulis 2010-09-07 06:22:16

19

我也有過這種情況。奇怪的是,它似乎發生在我更改構建配置(從x64到x86)之後。以下是我如何解決它的方法:

  1. 右鍵單擊解決方案,選擇屬性。
  2. 在「啓動項目」下,從「單一啓動項目」切換到「多個啓動項目」。
  3. 將Action設置爲「啓動」WCF項目。

即使我在本地IIS服務器(而不是VS開發服務器)託管項目,這解決了它,這有點令人費解。我懷疑將項目設置爲「開始」也會導致VS附加到進程以進行調試。

http://msdn.microsoft.com/en-us/library/bb157685.aspx

+0

只花了4個小時才找到這篇文章。你統治! – 2011-09-07 21:54:13

+0

我對調試器有類似的問題,但更改x86/x64配置在我的機器上不起作用。客戶端和服務器都運行在32位,但我仍然無法步入服務的代碼 – Knasterbax 2013-01-23 09:15:26

+1

+1以獲得一個好的解決方案。 – pordi 2013-05-02 07:09:09

0

我有類似的問題。 WCF託管WCF服務主機,請求測試WCF測試客戶端我的問題是由構建配置名稱中的空間引起的。只要我使用沒有空格的配置名稱,debbuging就起作用了。

我想真正的問題是生成輸出文件夾以配置名稱命名的文件夾結尾。

0

@msulis - 是的,謝謝,這補救了我。我最近也改變了目標CPU從x86到x86。我不能直接回復你的信息,因爲某種原因,所以如果出現這個「答案」,我會很抱歉。

0

是的,我得到了同樣的問題,WCF使用其他進程。最後,我找到了一種方法,我首先啓動一個WCF服務的新實例(調試 - >啓動一個新實例),然後啓動客戶端,WCF服務中的斷點命中!

1

此外,當使用VS調試並將其附加到w3wp.exe進程,並且您具有除http:80:*之外的特定端口綁定時,必須將VS中的debug> web設置爲該站點,並且端口http正在運行。

3

對於Visual Studio多配置:

在解決方案的屬性頁,確保「配置」爲您的Web服務被設置爲「調試」,而不是「釋放」。

1

不進入WCF服務的另一個原因可能是傳遞給WCF方法的數據的大小。

例如,我傳遞了一個大小爲1000的dobules數組,我發現一個錯誤的請求錯誤(400),看看該方法是如何運行的。我做了500的大小,現在它調試WCF。

+0

這讓我覺得「我發送的消息也退出了很大」(我正在向服務發送二進制文件)。減少了消息的大小,並解決了問題! – 2016-09-27 06:27:50